Вам нужно заключить в скобки троичные условия:
<?php
for ($a=0; $a < 7; $a++) {
echo (
$a == 1 ? 'one' :
($a == 2 ? 'two' :
($a == 3 ? 'three' :
($a == 5 ? 'four' : 'other'))));
echo "\n";
// prints 'four'
}
exit;
?>
возвращается:
other
one
two
three
other
four
other
как и следовало ожидать.
См. Примечание внизу «Тернарные операторы» в PHP Справка по троичным операторам .
Выражения оцениваются слева направо. Итак, вы на самом деле получаете:
echo (
((($a == 1 ? 'one' : $a == 2)
? 'two' : $a == 3) ? 'three' :
$a == 5) ? 'four' : 'other');
Итак, для $a=2
вы получите:
echo (
((($a==2) ? 'two' : $a == 3) ? 'three' :
$a == 5) ? 'four' : 'other');
, а затем
echo (
((true ? 'two' : $a == 3) ? 'three' :
$a == 5) ? 'four' : 'other');
, а затем
echo (
('two' ? 'three' : $a == 5) ? 'four' : 'other');
, а затем
echo (
'three' ? 'four' : 'other');
и так echo 'four'
.
Помните, что PHP динамически типизирован и обрабатывает любые ненулевые ненулевые значения как ИСТИНА.