phpで三項演算子を入れ子するにはネスト部分を()で囲おう!

製作 プログラム

最終更新日:2016/10/03

ラムネグから一言:寝る前に読むとくだらなすぎて逆に寝れると好評なすごい適当なブログをこっちではじめてます.

phpで三項演算子を使う時のお話

最初に対処法からです。

変更後のように入れ子にされている二つ目の三項演算子全体をカッコで囲んでください。

変更前


$test = 1;
( $test==2 ? '○' : $test==1 ? '◎' : '×')
出力:◎

変更後


$test = 1;
( $test==2 ? '○' : ($test==1 ? '◎' : '×'))
出力:◎

php三項演算子のナゾ

phpで三項演算子を使うとき、入れ子(ネスト)して使うとこうなります。

その①


$test = 1;
( $test==2 ? '○' : $test==1 ? '◎' : '×')
出力:◎

その②


$test = 2;
( $test==2 ? '○' : $test==1 ? '◎' : '×')
出力:◎

上記の①は予想通りなんですが、②だと予想は○になって欲しいんですが、実際は◎になります。

これは「phpの比較演算子について」の三項演算子の欄に原因が書かれていますが、三項演算子を入れ子にすると下記のようにピンクのカッコがついて処理されるためです。

そしてphpの処理ではこのピンクのカッコ書きの中はtrueとして処理されるようなので、結果その後ろの「◎」か「×」かという三項演算子がtrueとなり、に$testが2の場合でも二重丸が出てくるようになります。


$test = 2;
( ($test==2 ? '○' : $test==1) ? '◎' : '×')
出力:◎

ですので、冒頭で挙げたように入れ子(ネスト)されている三項演算子をカッコでくくってあげることで、こちらが意図している通りの順番で処理してくれるようになります。

【おしらせ、というか完全なる宣伝】

文体がもうぜんぜん適当すぎてあれだけどものすごい自由に書いてるブログ「檸檬だくだく」もよろしく.寝る前に読める恐ろしくくだらないやつです.

こんなにも一ミリも目を引かれないタイトルを取り扱ってます: ココア20g / ハイチュウとかってさ / なぜ米と小麦を食べようと思ったのかの謎 /