Вам нужно несколько скобок вокруг правого ручного операнда:
$foo = 1;
$bar = ( $foo == 1 ) ? "1" : (( $foo == 2 ) ? "2" : "other");
echo $bar;
Интерпретатор PHP не работает и обрабатывает вашу строку:
$bar = ( $foo == 1 ) ? "1" : ( $foo == 2 ) ? "2" : "other";
как
$bar = (( $foo == 1) ? "1" : ( $foo == 2)) ? "2" : "other";
, и поскольку это левое выражение оценивается как "true", вместо него возвращается первый операнд оставшегося троичного оператора ("2").