2010-08-18 85 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函數快很多,