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

製作 プログラム

2016/07/06(水)

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) ? '◎' : '×')
出力:◎

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