[请参阅下面的更快/更好的代码。
array_diff的行为在PHP 5.3.4中要好得多,但仍比Leo的函数慢10倍。
还值得注意的是,这些函数并不严格等同于
array_diff
它们,因为它们不维护数组键,即my_array_diff(x,y) == array_values(array_diff(x,y))
。
/更新
更好的解决方案是使用哈希映射
function my_array_diff($a, $b) { $map = $out = array(); foreach($a as $val) $map[$val] = 1; foreach($b as $val) if(isset($map[$val])) $map[$val] = 0; foreach($map as $val => $ok) if($ok) $out[] = $val; return $out;}$a = array('A', 'B', 'C', 'D');$b = array('X', 'C', 'A', 'Y');print_r(my_array_diff($a, $b)); // B, D
基准
function your_array_diff($arraya, $arrayb){ foreach ($arraya as $keya => $valuea) { if (in_array($valuea, $arrayb)) { unset($arraya[$keya]); } } return $arraya;}$a = range(1, 10000);$b = range(5000, 15000);shuffle($a);shuffle($b);$ts = microtime(true);my_array_diff($a, $b);printf("ME =%.4fn", microtime(true) - $ts);$ts = microtime(true);your_array_diff($a, $b);printf("YOU=%.4fn", microtime(true) - $ts);
结果
ME =0.0137YOU=3.6282
任何问题?;)
而且,只是为了好玩,
$ts = microtime(true);array_diff($a, $b);printf("PHP=%.4fn", microtime(true) - $ts);
结果
ME =0.0140YOU=3.6706PHP=19.5980
这是令人难以置信的!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)