【发布时间】:2010-11-29 20:35:59
【问题描述】:
我有两个数组,数组 A 包含一个长列表,其中包含一些我想要删除的元素。数组 B 是我希望从数组 A 中删除的那些元素的完整列表。
实现这一目标的最有效方法是什么?
【问题讨论】:
标签: php codeigniter
我有两个数组,数组 A 包含一个长列表,其中包含一些我想要删除的元素。数组 B 是我希望从数组 A 中删除的那些元素的完整列表。
实现这一目标的最有效方法是什么?
【问题讨论】:
标签: php codeigniter
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 倍。
【讨论】:
【讨论】:
在manual 中,它给出了array_dif() 这个例子:
<?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 的条目不是 存在于任何其他数组中。
【讨论】: