3

$var1 = 22; $var2 = 10; 回声 $var1 = ($var1 < $var2) ?$var1 : $var2; //较小的 var echo '
'; 回声 $var2 = ($var1 > $var2) ?$var1 : $var2; //更大的变量

我希望它可以打印10 and 22,但它会打印10 and 10. 任何想法我做错了什么?

谢谢

更新 谢谢大家。

    $min = min($var1, $var2); 
    $max = max($var1, $var2);

    $var1 = $min;
    $var2 = $max;
4

7 回答 7

4

您正在重新分配echo.

// $var1 is being assigned minimum of 10,22 which is 10.
// after this $var1 and $var2 will both be 10.
echo $var1 = ($var1 < $var2) ? $var1 : $var2; 

你想要什么:

echo ($var1 < $var2) ? $var1 : $var2; // prints min.
echo '<br />';
echo ($var1 > $var2) ? $var1 : $var2; // prints max.

编辑:

如果你总是想要两个值中较小的一个,$var1你可以这样做:

if($var1 > $var2) { // if $var1 is larger...swap.
        list($var1,$var2)  = array($var2,$var1);
}
于 2010-04-28T11:17:10.613 回答
4

@unicornaddict 已经解决了您的问题,但为了更简单,您可以使用PHP 提供的min和函数。max

echo min($var1, $var2), '<br/>', max($var1, $var2);
于 2010-04-28T11:19:11.203 回答
1

您在第一次比较中覆盖了 $var1。所以第二个比较比较 10 > 10。

$var1 = 22;
$var2 = 10;
echo $var1 = (10 < 22) ? 22 : 10; //smaller var -> $var1 now has the value 10
echo '<br />';
echo $var2 = (10 > 10) ? 22 : 10; //greater var -> 10 is not greater than 10, so $var2 gets a value of 10.
于 2010-04-28T11:16:30.820 回答
1

您使用第一个回显将 10 分配给 $var1,因此在第二个回显中它们都是 10。

于 2010-04-28T11:17:27.163 回答
1
echo $var1 = ($var1 < $var2) ? $var1 : $var2; //smaller var

这将 10 分配给$var1。现在两个变量都包含 10。那么你对第二行有什么期望呢?

于 2010-04-28T11:17:42.160 回答
1

你需要一个临时变量。只需使用分钟,

echo min($var1, $var2);
于 2010-04-28T11:18:26.963 回答
1

您的问题还提到交换值,其他答案似乎没有注意到。鉴于您的示例代码,您似乎希望$var1包含两个值中较小的值和$var2较大的值。

$var1 = 22;
$var2 = 10;
if ($var1 > $var2) {
    list($var1, $var2) = array($var2, $var1);
}
// $var1 will now be smaller than (or equal to!) $var2
于 2010-04-28T11:35:38.267 回答