2010-10-19 6 views
-1

Si j'avais ce code:Recherche variable tableau()

$result = 1; 

$square = array(

"00" => -1, 
"0" => 0, 
"1" => 1, 

); 

et je voulais savoir si $ result est égale à l'une des valeurs du tableau de carré $ (-1, 0 ou 1).

Je suppose qu'il devrait y avoir une fonction qui compare une variable à toutes les valeurs de la matrice et renvoie VRAI ou FAUX en conséquence.

Si isnt une telle fonction, je suis ouvert à toute suggestion et/ou des solutions de contournement que vous pourriez avoir caché sous vos manches :)

Merci à l'avance

Répondre

3

Vous cherchez in_array():

$result = 1; 
$square = array("00" => -1, "0" => 0, "1" => 1,); 

if (in_array($result, $square)) { 
    echo "Found something!"; 
} 
+0

A travaillé comme un charme. Merci beaucoup! – Trufa

1

in_array devrait travailler pour vous.

if(in_array($result, $square)) { 
    //$result is in there. 
} 
+0

Essayez-le, merci! – Trufa

+0

Pour mémoire, cette fonction est SUPER LENTE pour les grandes baies. – mattbasta

+0

@mattbasta: existe-t-il une alternative? – zerkms

0

if(array_search($result,$square)===false) { echo "DNE"; }

Notez le ===!

EDIT: paramètres de la fonction activée - désolé

+0

@meagar, il n'utilise pas 'in_array'. –

+0

Il semblerait que 'in_array' soit plus court. – Ben

-1

Il y a une fonction en php qui va le faire. Il est connu sous le nom array_search(); Pour votre code ci-dessus vous utilisez

if(false !== array_search($square, $result)){ 
echo "Found something"; 
} 

se trouve le lien vers la documentation here. Regardez vers le bas pour les exemples de code.

+1

Vous devez comparer avec '===' pour éviter des problèmes si la valeur [0] est retournée. – Ben

+0

Exemple contient une faille sérieuse, et échouera si l'index de l'élément que vous recherchez évalue à 'false 'lorsqu'il est contraint à un booléen. Vous devez utiliser 'if (false! == array_search (...))'. – meagar

+0

Merci de l'avoir remarqué ... Je l'ai corrigé dans l'exemple ci-dessus – Slruh

1

Si votre tableau va être grande (> 500 éléments), vous allez vouloir le faire:

$flip_square = array_flip($square); 
return isset($flip_square["string_to_search_for"]); 

Si vous ne le faites pas, il peut être mortel lent. C'est beaucoup plus rapide que in_array().

+1

Utilisez 'array_key_exists' au lieu de' isset', ce qui retournera false dans le cas bizarre où la valeur recherchée existait à l'origine 'null' . – meagar

+0

Juste un FYI si l'OP prévoit d'utiliser ceci .. cela ne fonctionnera pas si des valeurs sont (ou seront) quelque chose, mais des entiers ou des chaînes. –

+0

@David Titarenco: pour être précis: tout sauf «scalaire» – zerkms