Нахождение меньшего значения и значений подкачки в php - PullRequest
3 голосов
/ 28 апреля 2010

$ var1 = 22; $ var2 = 10; echo $ var1 = ($ var1 <$ var2)? $ var1: $ var2; // меньшая переменная echo '<br />'; echo $ var2 = ($ var1> $ var2)? $ var1: $ var2; // больший переменный

Я ожидаю, что он напечатает 10 and 22, но он напечатает 10 and 10. есть идеи что я делаю не так?

Спасибо

UPDATE Спасибо всем.

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

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

Ответы [ 7 ]

4 голосов
/ 28 апреля 2010

@ unicornaddict уже решил вашу проблему, но для упрощения вы можете использовать функции min и max, которые предоставляет PHP.

echo min($var1, $var2), '<br/>', max($var1, $var2);
4 голосов
/ 28 апреля 2010

Вы переназначаете переменные в 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.

EDIT:

Если вам всегда нужно меньшее из двух значений в $var1, вы можете сделать:

if($var1 > $var2) { // if $var1 is larger...swap.
        list($var1,$var2)  = array($var2,$var1);
}
1 голос
/ 28 апреля 2010

В вашем вопросе также упоминается обмен значениями, о которых другие ответы, похоже, не отмечают. Учитывая ваш пример кода, похоже, вы хотите, чтобы $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
1 голос
/ 28 апреля 2010

Вам нужна временная переменная. Просто используйте min,

echo min($var1, $var2);
1 голос
/ 28 апреля 2010
echo $var1 = ($var1 < $var2) ? $var1 : $var2; //smaller var

Это присваивает от 10 до $var1. Теперь обе переменные содержат 10. Так что вы ожидаете от второй строки?

1 голос
/ 28 апреля 2010

Вы назначаете 10 для $ var1 с первым эхом, поэтому на втором они оба равны 10.

1 голос
/ 28 апреля 2010

Вы перезаписали $ 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.
...