Почему тернарный оператор php дает неправильный вывод?

Я уже видел тему ошибка тернарного оператора PHP

Я видел ветку, упомянутую выше, и использую круглые скобки, но все же это не дает ожидаемого результата.

<?php
    $ch = 'A';
    $ans = (($ch == 'C') ? 'Cccc'
        : ($ch == 'A') ? 'Aaaa'
        : ($ch == 'G') ? 'Ggggg'
        : ($ch == 'Y') ? 'Yyyyy'
        : 'unknown');
    echo $ans;
    echo "\n";
?>

Это выводит Yyyyy, а не Aaaa, как ожидалось. Кто-нибудь может объяснить, почему?


person mrid    schedule 01.01.2017    source источник
comment
Почему бы вам просто не использовать ассоциативный массив вместо последовательности троичных чисел?   -  person Barmar    schedule 01.01.2017
comment
Спасибо за предложение @Barmar! Я могу использовать ассоциативный массив, но мне просто любопытно, почему это происходит   -  person mrid    schedule 01.01.2017
comment
Это потому, что тернарный оператор левоассоциативен. Так это как если бы вы написали ((($ch == 'C') ? 'Cccc' : ($ch == 'A') ? 'Aaaa' : ($ch == 'G') ? 'Ggggg' : ($ch == 'Y')) ? 'Yyyyy' : 'unknown')   -  person Barmar    schedule 01.01.2017


Ответы (1)


Брекеты поставлены неправильно. Попробуй это

$ch = 'A';
    $ans = ($ch == 'C' ? 'Cccc' :
         ($ch == 'A' ? 'Aaaa' :
         ($ch == 'G' ? 'Ggggg' : 
         ($ch == 'Y' ? 'Yyyyy':
         'unknown'))));
    echo $ans;
    echo "\n";
person Naga    schedule 01.01.2017
comment
Я не уверен, почему за это проголосовали, поскольку он работает так, как задумано. - person Jhecht; 01.01.2017