Почему не так работают условая?
пхп разбирает выражение следующим образом:
(true ? 1 : false) ? 2 : 3;
Если то что в скобках истинно, то будет 2, иначе 3.
Разбираемся с тем что в скобках: true ? 1 : false. Очевидно, что это 1. 1 в пхп трактуется как истина. Поэтому получаем 2. Что же тут непонятного?
В яваскрипте приоритет операций выставляется иначе: 
true ? 1 : (false ? 2 : 3);
Во избежание таких недоразумений всегда расставляйте скобки явно, а еще лучше - не пишите вложенные тернарные операторы вообще.
Что это вы накалякали? Почитайте как использовать тернарные операции. php.net/manual/ru/language.operators.comparison.php