- ベストアンサー
条件分岐で複数条件の指定を簡易的にしたい
if ($key == 'keyword1' and $key == 'keyword2') この様な条件分岐をする場合に、keywordを足す度に and $key == 'keyword' と書いていかなければならないのが不便なので、これを $keywords = 'keyword1', 'keyword2'; などと一つの変数で指定してそれが反映される様にしたいのですが、こういった場合にはどうしたら良いのでしょうか。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
$keywords = array ( 'keyword1', 'keyword2', 'keyword3' ); if(in_array($key,$keywords)){ //条件に該当 } in_arrayで調べられるよ
その他の回答 (2)
- bimson
- ベストアンサー率40% (2/5)
if ($key == 'keyword1' and $key == 'keyword2') って絶対falseになるように思いますが気のせいでしょうか… もし if ($key == 'keyword1' or $key == 'keyword2') の間違いであれば $keywords = array('keyword1','keyword2'); などと配列変数を定義して if (in_array($key, $keywords)) とすればOKです 今後keywordが増えても配列に加えていくだけでOKです
お礼
ベストアンサーはTaiyonoshizukuさんとしますが、bimsonさんのこの度のご回答にも深く感謝致します。 ご指摘頂いたfalseになるという部分をこれから勉強していこうと思います。 本当にありがとうございました。
補足
回答No2のTaiyonoshizukuさんへの補足に書きましたが、orではなくandで処理したいのですが、これは良くないのでしょうか…?
- Taiyonoshizuku
- ベストアンサー率37% (183/489)
あ、よく見たら if ($key == 'keyword1' and $key == 'keyword2') これは if ($key === 'keyword1' || $key === 'keyword2') ってことだよね。 andはタイポだよね。絶対条件に引っかからないね。 三つのイコール(===)を使う理由は調べてみてね
お礼
文字列同士の比較については、===の方が型の変換処理が無い分処理が早いのですね。 とても勉強になりました。
補足
前述しました補足の様に、$fieldsの配列から指定したキーの配列だけを取り出したいという内容なのでandか&&で良いと思ったのですが、3日前にPHPについて勉強しだした素人なのであんまり自信はないです…。
お礼
in_array($key,$keywords,TRUE)で型も確認する様にしたところ解決する事が出来ました。 もう少しマニュアルをしっかり読むべきでした。 余談ですが、Taiyonoshizukuさんのプロフィールを見て、答えそのものが無くても、一つのヒントを紐解いて答えに辿り着ける様にこれからも勉強を続けていこうと改めて思いました。 この度はご回答頂き、本当にありがとうございました。
補足
条件分岐の内容についてなのですが、記載した範囲では情報が不足していると思いましたので追記します。 実際には以下の様に、$fieldsにある配列をincludeする様な形で取り出したいという内容になります。 $fieldsは入力情報のキー名(keyword)をキーにした連想配列です。 $keysは入力情報のキー名(keyword)の配列を返します。 入力情報 キー:keyword 値:data $all_values = array(); $fields = array( "keyword1" => array("data1", "data2"), "keyword2" => array("data3"), "keyword3" => array("data4", "data5", "data6") ); $keys = array("keyword1", "keyword2", "keyword3"); foreach ($keys as $key) { if ($key === 'keyword1' && $key === 'keyword2') { $values = $fields[$key]; $all_values = array_merge($all_values,$values); unset($key); } } if ($all_values) { $n = 0; foreach ($all_values as $key => $value) { if ($n == $limit) break; echo '<p>' . $value . '</p>' . "\n"; $n++; unset($all_values[$key]); } } in_arrayをマニュアルで調べたのですが、こういった場合にも対応出来る様にするにはどうしたら良いかまではわかりませんでした。