PHPのarray_diff()関数は大きい配列を処理する時の効率の問題
1358 ワード
cisaがPHP公式BUGページに提出する方法
<?php
/**
* php 5.2.6 array_diff()
*
*
* :http://www.CodeBit.cn
* :http://bugs.php.net/47643
*/
function array_diff_fast($data1, $data2) {
$data1 = array_flip($data1);
$data2 = array_flip($data2);
foreach($data2 as $hash => $key) {
if (isset($data1[$hash])) unset($data1[$hash]);
}
return array_flip($data1);
}
?>
は、Chinannixフォーラムのリーダhightmanの考え方に基づいて書き換えられる方法である
<?php
/**
* php 5.2.6 array_diff()
* ChinaUnix hightman
*
* :http://www.CodeBit.cn
* :http://bbs.chinaunix.net/viewthread.php?tid=938096&rpid=6817036&ordertype=0&page=1#pid6817036
*/
function array_diff_fast($firstArray, $secondArray) {
//
$secondArray = array_flip($secondArray);
//
foreach($firstArray as $key => $value) {
//
if (isset($secondArray[$value])) {
//
unset($firstArray[$key]);
}
}
return $firstArray;
}
?>
は、この方法は第二の配列のkeyとvalueだけを交換したので、効率がより高い。注意:PHP内蔵のarray_diff()関数は複数の配列を扱うことができますが、本明細書で提供する方法は2つの配列の比較のみを処理します。