2017-01-01 5 views
0

私はすでにスレッドPHP ternary operator errorなぜPHPの3進演算子が間違った出力を出すのですか?

を見てきた私は、上記のスレッドを見ていると括弧を使用していますが、まだそれが期待される出力を与えるものではありません。

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

これはYyyyyと期待通りではないAaaa出力します。なぜ誰かが説明できますか?

+2

3進数列の代わりに連想配列を使用してみませんか? – Barmar

+0

提案してくれてありがとう@Barmar!私は連想配列を使うことができますが、なぜこれが起きているのか不思議でした。 – mrid

+0

これは三項演算子が左結合であるからです。 ($ ch == 'C')?Cccc ' :($ ch ==' A ')?' Aaaa ' :($ ch ==' G ')?' :($ ch == 'Y'))? 'Yyyyy' : '不明') ' – Barmar

答えて

1

中カッコが正しく配置されていません。試してみてください

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

なぜこれが意図したとおりに動作するのかは分かりません。 – Jhecht

関連する問題