相互の配列の交差

array_diff, array_intersectで配列の比較
例えばDBで取り出した配列のデータと対象の配列にあるデータのが含まれているか含まれていないかを高速に処理する。
foreachで全スキャンをやってしまうと、データが大量になるとネックになる。
array_diff, array_intersectは高速に処理する。

https://qiita.com/PitPat/items/50c6c5277675932ad636
実例
10万個の要素を持つ配列を2つ。
$dataには0〜99,999の100,000個の数字
$randomDataには0〜500,000のうちランダムに100,000個の数字が格納されている。

array_intersect
#1. 重複する要素
##1.1 foreachで普通に比較する
foreach ($data as $i) {
 foreach ($randomData as $j) {
  if ($i == $j) {
   $result1[] = $i;
   break;
  }
 }
}
実行結果
121.19333004951 seconds.
Count: 18016 //重複している要素の数

データの取り出し
$array1 = array(2, 4, 6, 8, 10, 12);
$array2 = array(1, 2, 3, 4, 5, 6);
var_dump(array_intersect($array1, $array2));
array(3) {
[0]=> int(2)
[1]=> int(4)
[2]=> int(6)
}

var_dump(array_intersect($array2, $array1));
array(3) {
[1]=> int(2)
[3]=> int(4)
[5]=> int(6)
}

##1.2 array_intersect
$result2 = array_intersect($data, $randomData);
実行結果
0.24257612228394 seconds.
Count: 18016 //同じプログラム内で行ったので同じ重複数

array_diff
#2. 重複しない要素
$result2 = array_diff($data, $randomData);
実行結果
0.02807092666626 seconds
Count: 82026

Previous article

Web APIの利用 Garoon編