2010-08-18 7 views
4

J'ai besoin de comparer une valeur à un ensemble de tableau. Cependant, j'ai besoin de comparer plusieurs valeurs dans foreach. Si vous utilisez in_array, cela peut être lent, très lent. Y a-t-il une alternative plus rapide? Mon code actuel estplus rapide que in_array?

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

Merci.

+2

définir "réel lent" en chiffres s'il vous plaît –

+0

Les tableaux sont encore e même en PHP5 qu'ils étaient en PHP4, merci de tagger correctement. http://php.net/ChangeLog-5.php http://de.php.net/manual/fr/function.array-diff.php – TheLQ

Répondre

6

Vous pouvez utiliser array_diff pour calculer la différence entre le tableau $a et $array. Cela vous donnerait toutes les valeurs non dans $array ou $a.

Exemple de Manuel:

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

Array 
(
    [1] => blue 
) 

Ou vous pouvez utiliser array_intersect pour trouver ceux qui sont dans ces tableaux.

array_intersect Exemple de Manuel PHP:

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

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

Choisissez celui dont vous avez besoin.

1

Je pense que vous cherchez l'intersection de $ a et $ array, n'est-ce pas? Si oui, utilisez simplement array_intersect()

+2

Je pense que vous voulez dire 'array_intersect()' –

+0

@Dennis Haarbrink: Oui , ma faute. – greg0ire

2

Si vous pouvez traiter le tableau comme un hachage:

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

Ensuite, dans le foreach faire ceci:

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

Je viens de copier & collé votre exemple, je suppose qu'il ya plus de code, mais fondamentalement en utilisant le isset est beaucoup plus rapide que d'utiliser la fonction in_array,

Questions connexes