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