比in_array更快吗?

4

我需要将一个值与一个数组进行比较。然而,我需要在foreach中比较多个值。如果使用in_array,速度会很慢,非常慢。有没有更快的替代方法?我的当前代码是

foreach($a as $b){
   in_array($b, $array);
}

谢谢你。

感谢您。


2
请用数字定义“真正慢”的含义。 - Your Common Sense
在PHP5中,数组与PHP4中的数组仍然相同,请正确标记。http://php.net/ChangeLog-5.php http://de.php.net/manual/en/function.array-diff.php - TheLQ
4个回答

6
你可以使用array_diff函数来计算$a数组与$array的差异,这将给出所有不在$array$a中的值。

手册示例:

$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
print_r( array_diff($array1, $array2) );

Array
(
    [1] => blue
)

或者您可以使用array_intersect函数来查找那些在这些数组中的元素。

array_intersect PHP手册示例:

$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
print_r( array_intersect($array1, $array2) );

Array
(
    [a] => green
    [0] => red
)

选择您需要的那一个。

3

如果你可以将数组视为哈希表:

$array = array('value' => 1);

然后在 foreach 循环中执行以下操作:

foreach($a as $b){
    isset($array[$b]);
}

我刚刚复制粘贴了你的示例,我想还有更多的代码,但基本上使用isset要比使用in_array函数快得多。


1

我想你正在寻找 $a 和 $array 的交集,是吗?如果是的话,只需使用 array_intersect()


2
我认为你的意思是 array_intersect() - Dennis Haarbrink
@Dennis Haarbrink:是的,我的错。 - greg0ire

0

使用一个在数组值中禁止出现的分隔符将外部数组合并:

$x = "\x1a";
$array = $x . implode($x, $array) . $x;
foreach ($a as $b) {
    if (strpos($array, $x . $b . $x) !== false) {
        // in array
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接