- ベストアンサー
2つの配列/キーが一致する際、要素数の出現回数を求める方法
- 2つの配列があり、かつキーが一致する際、要素数の出現回数を求める方法を解説します。
- 具体的な例として、「Array a」と「Array b」が与えられた場合、「Array b」の要素が1の場合と1以外の場合で、「Array a」の値の出現回数を求める手順を説明します。
- 計算結果を示す「Array c」と「Array d」の例も記載されています。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
配列に関して何度か質問されているようですが、今までの内容は理解されていますか? 今現在はどういうソースを書いているのか(どこまで出来ているのか)くらいは提示すべきじゃないかと思います。でないと「丸投げを繰り返すヤツ」と思われてしまいます(実際そうだということであれば仕方ないですが・・・)。 基本的な配列の扱い方が理解出来ていれば、とりあえずは「力仕事」で書いても難しくはないと思います。 <?php $arr_a = array(1,2,2,1,3,1,2,2,3,1); $arr_b = array(0,1,0,1,1,1,1,0,2,1); $arr_c = array(); foreach ($arr_b as $key=>$val) { if ($val !== 1) { continue; } $i = $arr_a[$key]; if (!array_key_exists($i, $arr_c)) { $arr_c[$i] = 0; } $arr_c[$i]++; } ksort($arr_c); // 見易くする print "<pre>"; print_r($arr_c); print "</pre>"; $arr_d = array(); foreach ($arr_b as $key=>$val) { if ($val === 1) { continue; } // 違いはここだけ $i = $arr_a[$key]; if (!array_key_exists($i, $arr_d)) { $arr_d[$i] = 0; } $arr_d[$i]++; } ksort($arr_d); print "<pre>"; print_r($arr_d); print "</pre>";
補足
回答ありがとうございました。 >if (!array_key_exists($i, $arr_c)) { $arr_c[$i] = 0; } これは何をしているのでしょうか? コメントアウトすると、Noticeエラー(Undefined index)になるのですが、なぜでしょうか? このエラーは、配列の添え字(ここでは $i?)が未定義の際、出るものだと認識しているのですが、 $arr_c[$i] = 0; と値へ0を格納することで、なんで「Noticeエラー」が出なくなるのでしょうか? また、参考までに、否定ではなくて、if (array_key_exists で書くと、どうなるでしょうか?