• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:<PHP>2つの条件を満たす switch )

PHPのswitch文で条件を複数指定する方法は?

このQ&Aのポイント
  • PHPのswitch文では、通常は1つの条件しか指定できません。
  • ただし、複数の条件を指定したい場合には、caseの横にandやorを使って条件を組み合わせることができます。
  • 例えば、東京・田中さんのように複数の条件で値を返したい場合には、'case "東京・田中さん" and "ペットはいぬ"'のように条件を書くことができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.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; } } ?>

origin_five
質問者

お礼

まさに理想系です。

その他の回答 (5)

回答No.5

多次元連想配列を使用した表引きを使用できませんか? $都道府県 = "東京" や "大阪" が入ります $名前 = "田中" や "鈴木" が入ります。 // 表引きのためにテーブルを作成します。 //$messageTable[都道府県][名前] = メッセージ $messageTable["東京"]["田中"] = "ぺっとはいぬ"; $messageTable["東京"]["鈴木"] = "ぺっとはねこ"; $messageTable["大阪"]["田中"] = "ぺっとはらいおん"; $messageTable["大阪"]["鈴木"] = "ぺっとはきりん"; // 表引き echo $messageTable[$都道府県][$名前] http://nyx.pu1.net/reference/typearray/multi.html

origin_five
質問者

お礼

そこまでの勉強が出来ていませんでした・・

  • 1minn
  • ベストアンサー率57% (52/90)
回答No.4

1&2です。 hogehoge78の書き方がまさにそれですね。 ただそれだとswitch文がほぼ無意味です。 ソースとしてその方が見やすいのであればそれもありかもしれませんが・・・ 普通にif文で 「&&」 AND条件にすれば良いだけだと思います。

origin_five
質問者

お礼

僕もそう思いました・・・ でも、switch文が浮かんでしまいまして。勉強不足です。

回答No.3

<?php switch(true){ case $type=="田中さん" && $pref=="東京": echo 'ペットはいぬ';break; case $type=="田中さん" && $pref=="大阪": echo 'ペットはさる';break; } ?> こういうことでしょうか? switchに、boolean(true/false)を渡してやって、case文の条件に、booleanが返るような条件を与えてやればヒットします。

origin_five
質問者

お礼

ありがとうございます!自分が考えてたやり方です。

  • 1minn
  • ベストアンサー率57% (52/90)
回答No.2

補足について その程度であればそのままcase文を追加したほうが早いですよね。 もしそれが10や100あるんだとしたらループで条件がヒットしたらループから抜けるような書き方でよいのではないでしょうか? そのほかヒットさせるには、配列の便利な関数などもいくらでもありますし、正規表現を使って見つけるのもありだと思います。 DBから必要なデータだけを取得するSQLを書くこともあると思います。 東京・田中 = 犬 東京・佐藤 = 猫 などのデータが見た目で判別できないほど件数があるのであれば、「人」に対応した「ペット」のデータが必要になりますよね。 テキストファイルでもDBでもよいと思いますが、そこからデータを取得して該当するデータを見つけてあげる処理になると思いますが、具体的な情報がないのでこれ以上具体的な回答は難しいです・・・ 回答になっていないですね。すみません。

origin_five
質問者

お礼

何度もありがとうございます。 case "変数1の値" and "変数2の値"(case "田中さん" and "東京") echo ペットは犬 といった書き方があるかと思いまして。

  • 1minn
  • ベストアンサー率57% (52/90)
回答No.1

$type = "田中さん"; switch ( $type ) { case "鈴木さん": echo 'ペットはいぬ'; break; case "佐藤さん": echo 'ペットはきじ'; break; case "田中さん": echo 'ペットはさる'; break; case "東京・田中さん": echo 'ペットはいぬ'; break; } こーゆーことでしょうか?

origin_five
質問者

お礼

説明が悪くてすみません。 変数を2つ使い、その組み合わせで値を返すと言うことです。 田中さんでも、 東京の田中さん、大阪の田中さん、名古屋の田中さんで値を返したいと言うことです。上記のソースでもその分、caseを増やせばいいのでしょうが・・・ もっとシンプルな方法があるかと。

関連するQ&A