从另一个数组中删除一个数组的所有元素的最有效方法是什么?

时间:2010-11-29 20:35:59

标签: php codeigniter

我有两个数组,数组A包含一个长列表,其中包含一些我想删除的元素。数组B是我希望从数组A中删除的那些元素的完整列表。

实现这一目标的最有效方法是什么?

3 个答案:

答案 0 :(得分:12)

使用array_diff()

答案 1 :(得分:12)

array_diff是明显的答案,但既然你已经要求最有效的方法,那么这是一个测试

$big = range(1, 90000);
$remove = range(500, 600);

$ts = microtime(true);
$result = array_diff($big, $remove);
printf("%.2f\n", microtime(true) - $ts);

$ts = microtime(true);
$map = array_flip($remove);
$result = array();
foreach($big as $e)
    if(!isset($map[$e]))
        $result[] = $e;
printf("%.2f\n", microtime(true) - $ts);

在我的机器上打印

0.67
0.03

因此,基于散列的查找的简单循环大约比array_diff快20倍。

答案 2 :(得分:6)

manual array_dif()为{{3}}提供了这个问题:

<?php
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);

print_r($result);
?>

输出:

Array
(
    [1] => blue
)
  

返回包含所有内容的数组   array1中的条目不是   存在于任何其他阵列中。

相关问题