2010-08-18 74 views
4

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

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

谢谢。

+2

定义“真正慢”的数字请 – 2010-08-18 08:34:03

+0

数组依然是th与PHP4中的PHP5相同,请正确标记。 http://php.net/ChangeLog-5.php http://de.php.net/manual/en/function.array-diff.php – TheLQ 2010-08-18 22:33:24

回答

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找到那些在这些阵列。从PHP手册

array_intersect例子:

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

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

选择一个你需要的。

1

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

+2

我想你的意思是'array_intersect()' – 2010-08-18 08:26:30

+0

@ Dennis Haarbrink:是的, 我的错。 – greg0ire 2010-08-18 09:14:01

2

如果你可以把数组作为哈希:

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

然后在foreach做到这一点:

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

我只是复制&粘贴你的榜样,我想有更多的代码,但基本上使用isset比使用in_array函数快很多,