比in_array更快?

时间:2010-08-18 08:22:20

标签: php arrays algorithm

我需要将一个值与一组数组进行比较。但是,我需要比较foreach中的多个值。如果使用in_array,它可能很慢,非常慢。还有更快的选择吗?我目前的代码是

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

谢谢。

4 个答案:

答案 0 :(得分: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
)

选择你需要的那个。

答案 1 :(得分:2)

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

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

然后在foreach中这样做:

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

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

答案 2 :(得分:1)

我认为你正在寻找一个$ a $数组的交集,不是吗?如果是,请使用array_intersect()

答案 3 :(得分:0)

使用禁止在数组值中写入的分隔符来放大外部数组:

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