[php]配列の中に条件分岐を突っ込む方法

そういうこともあるんだよ

どういうことか

配列なり連想配列なりがあるとして、それ自体をそのまま使うんじゃなくて値を変数にして、内容を他所から引っ張ってきて動かすこともある。

変数は作る時点で好き勝手にやれるんで条件分岐とかをする場合は普通はそっちでやれば良いんだけど、その変数すら配列で作ってる場合がある。ただ編集しやすいように、管理しやすいようにするだけならそこで終わりなんだけど、特定の値だった場合に挿入する内容を変えたい場合もあったりする。

通常は「true」で済ませる部分だけど、特定の値を含んでいた場合に限って「false」にしたい、みたいな。foreachとかだったら該当箇所を変数にして、条件分岐を噛ませたら良いんだけどね。それができない場合もある。

具体的なケースをいえば、wpでカスタム投稿を自作するときに、作る内容とどんなカスタム投稿を作るかを分けた場合。labelやらtaxonomyやら何やらを別で管理して突っ込むことで、カスタム投稿生成の内容は1個で済ませることができる。カスタム投稿を増やしたいときはlabelやら何やらをまとめてる方をいじれば良い。で、publicは絶対必要だろとか、menu_positionも個別に指定する必要ないだろとか、普遍の部分はわざわざ個別に指定する必要がないので出力側で直接指定する。そんな中、has_archiveはtrueで通してたんだけど後から考えたらこれだけはfalseにしなきゃな、みたいなことが起きたとする。出力側の内容を変数にして、管理側にそれに該当するものを突っ込めば良いっちゃいい。だけど既にいっぱい作ってるから手をいれるのがダルい、じゃあ出力側の内容に条件分岐を組み込みたい。そういうとき。

作例

連想配列内の値を条件分岐したいとする。

'has_archive'   => $slug === 'news'? true : false,

$slugがnewsだったらtrue、それ以外だったらfalse。

簡単といえば簡単だけど、駄目な書き方がある。というか、これしか通らないと思った方がいいかも。

'has_archive'   => if($slug === 'news'): true else: false endif;,
'has_archive'   => if($slug === 'news'){ true }else{ false },

「;」があるからとかじゃなく、「if」だからダメ。ただただt/fを書いてるのもなんか気持ち悪い。むしろよく使える手段があったなって感じもする。

ちなみにこんな感じのエラー文。

Parse error: syntax error, unexpected ‘if’ (T_IF) in /***/wp-content/themes/***/functions.php on line ***

wordpressに突っ込んだ場合

参考

配列の中でif文を使いたい(引数によって出力項目を変えたい) PHP
いつもお世話になっております。 以下のような配列を返す関数があり ```php private function createData(string $action)

やめた方がいい

言語化できない、感覚的な違和感はそもそもあった。

で、調べてみたら「できないことはないけどよくないよ」って感じになってた。

多少なり手間はかかるとしても、ifを使わずにうまいことやるようにした方がいい場合はある。

これもそう。一個だけだと思って追加して、今後増えたらどうするんだよとか。極力やめておいた方がいい。

コメント

タイトルとURLをコピーしました