PHP: <?php $life=0; $healt=-1; $work=-6; switch ($life) { case ($life >= 4): $v[] = 'life'; $vv++; break; case ($life <= - 4): $k[] = 'life'; $vk++; break; default: $n[] = 'life'; $nz++; } switch ($healt) { case ($healt >= 4): $v[] = 'healt'; $vv++; break; case ($healt <= - 4): $k[] = 'healt'; $vk++; break; default: $n[] = 'healt'; $nz++; } switch ($work) { case ($work >= 4): $v[] = 'work'; $vv++; break; case ($work <= - 4): $k[] = 'work'; $vk++; break; default: $n[] = 'work'; $nz++; } for ($i=0; $i<3; $i++) { echo "result v: ".$v[$i]."<br>"; echo "result k: ".$k[$i]."<br>"; echo "result n: ".$n[$i]."<br>"."<br>"; } ?> Выдает: result v: life result k: work result n: healt Ноль почему-то считает >= 4. В чем проблема?
Потому что неправильно используешь switch. PHP: <?php $a = 3; switch($a) { case 1: echo('1'); break; case 2: echo('2'); break; case 3: echo('3'); // Это сработает break; default: echo('default'); } ?> switch - case сравнивает выражение, которое стоит в скобочках после switch с выражением, которое стоит после case до тех пор пока не найдёт совпадения, иначе (совпадений нет) - выполнится default. Т.е. что получается: сравнивается выражение $life (содержит 0) c выражением ($life >= 4). Т.к. $life = 0, то (0 >= 4) === false. Сравнивается 0 и false. Т.к. в php есть автопреобразование типов, 0 преобразуется в false, и результат сравнения даёт true (false == false -> true) и выполняется блок Код (Text): $v[] = 'life'; $vv++;
igordata, sobachnik - спасибо парни, вы настоящие альтруисты! Сидеть тут читать топики новичков, которые не могут разобраться сами, да еще и помогать советами - это стоит уважения! А как же тогда правильно? Раз есть это автопреобразование, то с нулем у меня ничего не выйдет?
Думал очень много места сэкономлю с использованием switch. Но если подредактировать, то и через if довольно аккуратно получается. PHP: <?php $life=0; $healt=0; $work=0; if ($life>=4) {$v[] = 'life'; $vv++;} elseif ($life <= - 4) {$k[] = 'life'; $vk++;} else {$n[] = 'life'; $nz++;} if ($healt >= 4) {$v[] = 'healt'; $vv++;} elseif ($healt <= - 4) {$k[] = 'healt'; $vk++;} else {$n[] = 'healt'; $nz++;} if ($work >= 4) {$v[] = 'work'; $vv++;} elseif ($work <= - 4) {$k[] = 'work'; $vk++;} else {$n[] = 'work'; $nz++;} for ($i=0; $i<3; $i++) { echo "result v: ".$v[$i]."<br>"; echo "result k: ".$k[$i]."<br>"; echo "result n: ".$n[$i]."<br>"."<br>"; } ?>