2つの配列/キーが一致する際、要素数の出現回数を求める方法

このQ&Aのポイント
  • 2つの配列があり、かつキーが一致する際、要素数の出現回数を求める方法を解説します。
  • 具体的な例として、「Array a」と「Array b」が与えられた場合、「Array b」の要素が1の場合と1以外の場合で、「Array a」の値の出現回数を求める手順を説明します。
  • 計算結果を示す「Array c」と「Array d」の例も記載されています。
回答を見る
  • ベストアンサー

2つの配列/キーが一致する際、要素数の出現回数を求

2つの配列があり、かつキーが一致する際、要素数の出現回数を求めたいのですが、 どうすれば良いでしょうか? 具体的には、下記「a、b」より「c、d」を導き出したいです ■元データ( a、b キーは対応) Array a (   [0] => 1   [1] => 2   [2] => 2   [3] => 1   [4] => 3   [5] => 1   [6] => 2   [7] => 2   [8] => 3   [9] => 1 ) Array b (   [0] => 0   [1] => 1   [2] => 0   [3] => 1   [4] => 1   [5] => 1   [6] => 1   [7] => 0   [8] => 2   [9] => 1 ) ■欲しい結果 Array c … 「Array b」が1の時の、「Array a」の値の出現回数(キーは「Array a」の値) (   [1] => 3   [2] => 2   [3] => 1 ) Array d … 「Array b」が1以外(0または2)の時の、「Array a」の値の出現回数(キーは「Array a」の値) (   [2] => 2   [1] => 1   [3] => 1 ) ■備考 「Array b」が1の時の「Array a」   [1] => 2   [3] => 1   [4] => 3   [5] => 1   [6] => 2   [9] => 1 ・1が3回 ・2が2回 ・3が1回 「Array b」が1以外の時の「Array a」   [0] => 1   [2] => 2   [7] => 2   [8] => 3 ・2が2回 ・1が1回 ・3が1回

  • re999
  • お礼率61% (476/777)
  • PHP
  • 回答数1
  • ありがとう数0

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

  • ベストアンサー
  • shimix
  • ベストアンサー率54% (865/1590)
回答No.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>";

re999
質問者

補足

回答ありがとうございました。 >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 で書くと、どうなるでしょうか?

関連するQ&A

  • 2つの配列要素を比較して、一致しない要素を別配列にしたい

    配列A、配列B、配列C と仮にします。 配列Aから、配列Bと一致しなかった要素の値を配列Cに入れる (一致した分を除外したい) みたいなことをデータベースを使用せずに、Perlで実現したいのですが可能でしょうか?

    • ベストアンサー
    • Perl
  • 配列を比較して同じものがあった場合にそのKEYを返す

    二つの配列を比較して同じ値が入っていた場合、そのKEYを配列に入れたいと思います。 (例)$aと$bを比較して同じ値が入っているときに$aのkeyを$cに格納したい。 $a = array("","","山","","川","海","","富士山","空","",""); $b = array("川","","","","","海","","富士山","空",""); ※空白は無視したい。 この場合 $c = array("4","5","7","8"); のようにしたいと思います。 どなたか教えてください。

    • ベストアンサー
    • PHP
  • エクセルで不出現回数とそれの%の出し方教えて下さい。

    エクセルで.下記の時.25以上が出現してからの不出現回数と出現からの不出現%の 出し方を教えてください。  (右下記のような感じで) ・ A  B C D 不出回数  % 1 10 20 30 25    0   100% 2 28 10 15 20    3   25% 3 20 25 15 10    2   33%        

  • 配列(int)要素同士の合計、割り算

    配列(int)要素同士の合計、割り算は、どうやってするのでしょうか? ■元データ Array a  (   [2] => 2   [1] => 4   [3] => 1 ) Array b (   [1] => 2   [2] => 2   [3] => 1 ) ■導きたい結果1 … キーが同じ場合に、aとbの合計したい Array c (   [1] => 6   [2] => 4   [3] => 2 ) ■導きたい結果2 … キーが同じ場合に、aをcで割りたい(そして、✕100・四捨五入したい) Array d (   [1] => 67 4/6=0.666   [2] => 50 2/4   [3] => 50 1/2 )

    • ベストアンサー
    • PHP
  • 配列から別の配列の要素を削除する方法

    ある配列array_aに、100件の文字列要素が格納されています。 別の配列array_bには、80件の文字列要素が格納されています。 array_aの要素、array_bの要素共に重複するものはありません。 array_b中に存在する要素はすべてarray_a中にも存在します。 array_aにあり、array_bにはない要素で構成されたarray_cの作り方を教えてください。 例えば $array_a=array("a","b","c","d","e","f","g"); $array_b=array("e","b","d"); なら、 $array_c=array("a","c","f","g") になります。 配列array_aとarray_bは、 $array_b=array("b","b","d"); であったり、 $array_a=array("a","a","b","c","d","e","f","g"); といった「重複する要素を含むパターン」はありません。要素はすべてユニークです。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • エクセルで不出現回数の出し方教えて下さい。

    エクセルで.下記の時.25以上が出現してから不出現回数とその出現確立の 出し方を教えてください。  (右下記のような感じで) ・ A  B C D   不   % 1 10 20 30 28    0   100% 2 28 10 15 20    3   25% 3 20 25 15 10    2   33%         

  • エクセルで不出現回数とその%の出し方教えて下さい。

    エクセルで下記の時.最後に25以上が出現してからの 不出現回数とその%の出し方教えて下さい。 A B C 不回 % 1 10 25 10 1 50% 2 30 22 20 2 33% 3 30 10 26 0 100%

  • 特定の要素を抜き取って連想配列へ

    例えば、 $hoge = "%_A_%あ%_A_%%_B_%123%_B_%%_C_%%_C_%%_D_%hogehoge%_D_%"; というようなデータがあった場合、 %_?_% の?部分を連想配列のキーとして、 そのはさまれた部分を前途キーの内容として格納したいのですが、 どのようにすればいいでしょうか? (%_?_%~%_?_% において?の組み合わせは必ず単一でしか存在しません) 求めている結果は $array['A'] => あ $array['B'] => 123 $array['C'] => //空要素 $array['D'] => hogehoge のような形です とりあえず if (preg_match("/%_([A-Z])_%(.*)%_$1_%/" , $hoge ,$matched) ){ // $matchedを解析して$arrayに割り当て } とすればいけるかな、と思いやってみましたがパターンマッチの条件にすら当てはまらず撃沈 preg_matchのマッチ条件内ではまだ$1が使えないようでした 環境はPHP4です よろしくお願いします

    • ベストアンサー
    • PHP
  • ハッシュの中に格納された配列の要素数を得る方法

    予想配列のあるキーを配列とします。 %hash; @hash{'a'}=['aa','ab','ac']; 一方で普通の配列をスカラ変数として扱うと配列数を表します。 @array=(a,b,c,d,e); $num=@array; # $numは5になる。 それでは $num=@hash{'a}; あるいは  $num=@{hash{'a'}}; としたらどうなるのって ARRAY(0x2438c4) みたいになって、$numに@hash{'a'}の要素数は入りません。 予想配列の中に格納された配列の要素数を取り出す簡便な方法はないものでしょうか。 お手数をお掛けします。

    • ベストアンサー
    • Perl
  • 配列の要素を任意の数で割って、割り振る方法

    $abc = array("A", "B", "C", "D", "E", "F", "G", "H", "I"); 上記のような配列があったとします。 これを任意の数で割って、割り振っていきたいのですが、例えば7で割ったとしたら、 1. A, B 2. C, D 3. E 4. F 5. G 6. H 7. I という風に、割り振りたいのですが、どのようにすれば、こういったことがPHPのプログラムで実現できるか教えてください。 もしくは、 1. A, H 2. B, I 3. C 4. D 5. E 6. F 7. G という割り振り方でも大丈夫です。

    • ベストアンサー
    • PHP

専門家に質問してみよう