質問: $value_b){ echo "${key}の県庁所在地は${value}です。"; }else{ echo "${key}は中国地方ではありません。"; } } ```
回答: * 確認方法 ifの直前で、ifで使うやつを全部var_dumpするなどして確認してください ``` $prefectures = ["鳥取県" =>"鳥取市","島根県"=>"松江市","岡山県"=>"岡山市","広島県"=>"広島市","山口県"=>"山口市"]; $prefectures +=["大阪府"=>"大阪市","東京都" => "新宿区"]; $key_b = ["大阪府","東京都"]; $value_b = ["大阪市","新宿区"]; foreach ($prefectures as $key => $value) { var_dump($key); var_dump($key_b); var_dump($key==$key_b); var_dump($value); var_dump($value_b); var_dump($value==$value_b); if($key == $key_b && $value == $value_b){ echo "${key}の県庁所在地は${value}です。"; }else{ echo "${key}は中国地方ではありません。"; } } ``` * 問題点 変数名が正しく付与されていない 配列と文字列を比較しようとしている ``` "鳥取市","島根県"=>"松江市","岡山県"=>"岡山市","広島県"=>"広島市","山口県"=>"山口市"]; $prefecture_city_assoc_for_test +=["大阪府"=>"大阪市","東京都" => "新宿区"]; $prefectures_not_in_chugoku = ["大阪府","東京都"]; $cities_not_in_chugoku = ["大阪市","新宿区"]; foreach ($prefecture_city_assoc_for_test as $pref => $city) { var_dump($pref); var_dump($city); if(in_array($pref, $prefectures_not_in_chugoku, true) && in_array($city, $cities_not_in_chugoku, true)){ //ループしている$prefが、not_in_chugokuに入っているか(in_array)という比較をもともとしていたので、こっちのechoは中国地方でないパターンであるべき echo "${pref}は中国地方ではありません。".PHP_EOL; }else{ echo "${pref}の県庁所在地は${city}です。".PHP_EOL; } } ```