在php中查找较小的值并交换值

时间:2010-04-28 11:13:11

标签: php comparison logical-operators

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

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

由于

更新 谢谢大家。

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

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

7 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:4)

@unicornaddict已经解决了你的问题,但为了简化你可以使用PHP提供的minmax函数。

echo min($var1, $var2), '<br/>', max($var1, $var2);

答案 2 :(得分: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.

答案 3 :(得分:1)

你用第一个回声给$ var1分配10,所以在第二回合它们都是10。

答案 4 :(得分:1)

echo $var1 = ($var1 < $var2) ? $var1 : $var2; //smaller var

这会将10分配给$var1。现在两个变量都包含10.那么您对第二行的期望是什么?

答案 5 :(得分:1)

您需要一个临时变量。只需使用min,

echo min($var1, $var2);

答案 6 :(得分: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