たとえばいろんな本があって、それぞれの本にジャンルや特長などのタグがついています。共通するタグを手に入れるには、どのようにプログラムすればよいでしょうか?
本は配列のキーになっていて、タグは値です。本にタグはたくさん付けられますので、値といっても配列となっています。このようなデータを想定しましょう。
- 本A – タグ1、タグ2、タグ3
- 本B – タグ1、タグ3、タグ4
- 本C – タグ2、タグ3、タグ4
この場合、タグ3が全ての本につけられています。タグ1、タグ2、タグ4は惜しいことに3冊のうち2冊にしかタグ付けされていないので、該当しません。
人間の目で見れば、この程度すぐに抽出できますわね♪では、プログラムで自動的には?。。。難しいです><。でもできましたので、ノートいたします♪
使う関数!
- reset — 配列の内部ポインタを先頭の要素にセットする
- array_intersect — 配列の共通項を計算する
値を調べるもととなる配列のキーは保持される点が、興味深いと思いました。
考え方のポイント
- 共通するデータで基準の変数を上書き
2次元目の配列をどれか適当に選択しまして、これを基準の変数としております。これとその他の2次元目の配列を比較しまして、共通項を取得します。
そして次の2次元目の配列と比較しまして、、、と繰り返していくことで全ての2次元目の配列に共通する値を抽出することができます♪