- ベストアンサー
PHPのswitch文で条件を複数指定する方法は?
- PHPのswitch文では、通常は1つの条件しか指定できません。
- ただし、複数の条件を指定したい場合には、caseの横にandやorを使って条件を組み合わせることができます。
- 例えば、東京・田中さんのように複数の条件で値を返したい場合には、'case "東京・田中さん" and "ペットはいぬ"'のように条件を書くことができます。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
こうじゃない? <?php $member1=array("member"=>"田中さん","pref"=>"東京"); check_pet($member1); $member2=array("member"=>"田中さん","pref"=>"大阪"); check_pet($member2); $member3=array("member"=>"田中さん","pref"=>"名古屋"); check_pet($member3); function check_pet($memberinfo){ switch($memberinfo){ case array("member"=>"田中さん","pref"=>"東京"): echo 'ペットはいぬ'; break; case array("member"=>"田中さん","pref"=>"大阪"): echo 'ペットはさる'; break; default: echo 'ペットはいません'; break; } } ?>
その他の回答 (5)
- OrangeCup150
- ベストアンサー率62% (109/174)
多次元連想配列を使用した表引きを使用できませんか? $都道府県 = "東京" や "大阪" が入ります $名前 = "田中" や "鈴木" が入ります。 // 表引きのためにテーブルを作成します。 //$messageTable[都道府県][名前] = メッセージ $messageTable["東京"]["田中"] = "ぺっとはいぬ"; $messageTable["東京"]["鈴木"] = "ぺっとはねこ"; $messageTable["大阪"]["田中"] = "ぺっとはらいおん"; $messageTable["大阪"]["鈴木"] = "ぺっとはきりん"; // 表引き echo $messageTable[$都道府県][$名前] http://nyx.pu1.net/reference/typearray/multi.html
お礼
そこまでの勉強が出来ていませんでした・・
- 1minn
- ベストアンサー率57% (52/90)
1&2です。 hogehoge78の書き方がまさにそれですね。 ただそれだとswitch文がほぼ無意味です。 ソースとしてその方が見やすいのであればそれもありかもしれませんが・・・ 普通にif文で 「&&」 AND条件にすれば良いだけだと思います。
お礼
僕もそう思いました・・・ でも、switch文が浮かんでしまいまして。勉強不足です。
- hogehoge78
- ベストアンサー率80% (433/539)
<?php switch(true){ case $type=="田中さん" && $pref=="東京": echo 'ペットはいぬ';break; case $type=="田中さん" && $pref=="大阪": echo 'ペットはさる';break; } ?> こういうことでしょうか? switchに、boolean(true/false)を渡してやって、case文の条件に、booleanが返るような条件を与えてやればヒットします。
お礼
ありがとうございます!自分が考えてたやり方です。
- 1minn
- ベストアンサー率57% (52/90)
補足について その程度であればそのままcase文を追加したほうが早いですよね。 もしそれが10や100あるんだとしたらループで条件がヒットしたらループから抜けるような書き方でよいのではないでしょうか? そのほかヒットさせるには、配列の便利な関数などもいくらでもありますし、正規表現を使って見つけるのもありだと思います。 DBから必要なデータだけを取得するSQLを書くこともあると思います。 東京・田中 = 犬 東京・佐藤 = 猫 などのデータが見た目で判別できないほど件数があるのであれば、「人」に対応した「ペット」のデータが必要になりますよね。 テキストファイルでもDBでもよいと思いますが、そこからデータを取得して該当するデータを見つけてあげる処理になると思いますが、具体的な情報がないのでこれ以上具体的な回答は難しいです・・・ 回答になっていないですね。すみません。
お礼
何度もありがとうございます。 case "変数1の値" and "変数2の値"(case "田中さん" and "東京") echo ペットは犬 といった書き方があるかと思いまして。
- 1minn
- ベストアンサー率57% (52/90)
$type = "田中さん"; switch ( $type ) { case "鈴木さん": echo 'ペットはいぬ'; break; case "佐藤さん": echo 'ペットはきじ'; break; case "田中さん": echo 'ペットはさる'; break; case "東京・田中さん": echo 'ペットはいぬ'; break; } こーゆーことでしょうか?
お礼
説明が悪くてすみません。 変数を2つ使い、その組み合わせで値を返すと言うことです。 田中さんでも、 東京の田中さん、大阪の田中さん、名古屋の田中さんで値を返したいと言うことです。上記のソースでもその分、caseを増やせばいいのでしょうが・・・ もっとシンプルな方法があるかと。
お礼
まさに理想系です。