2010-08-30 4 views
1

Je semble avoir rencontré une erreur avec la recherche de tableau. Voici mon code.Erreur avec array_search

$allowedTypes = array(
    'image/gif', 
    'image/jpg', 
    'image/jpeg', 
    'image/png' 
); 
if(array_search("image/gif", $allowedTypes)) { 
    print "true"; 
} else { 
    print "false"; 
} 

Il imprime toujours faux. Même si image/gif est dans la liste des types autorisés.

+0

i n_array() semble fonctionner. –

Répondre

6

array_search renvoie l'index de l'élément dans le tableau. Dans ce cas, il retourne l'entier 0, qui, lorsqu'il est converti en booléen, est faux.

Si vous souhaitez lire la documentation, vous auriez vu ce qui suit dans une grande boîte rouge:

Cette fonction peut retourner FALSE, mais elle peut aussi retourner une valeur non booléenne qui évalue à FALSE, tel que 0 ou "". Veuillez lire la section sur les booléens pour plus d'informations. Utilisez l'opérateur === pour tester la valeur de retour de cette fonction.

Vous devez utiliser:

if (array_search("image/gif", $allowedTypes) !== false) { 
    // ... 
} 

Ou, pour dire simplement si le tableau contient l'élément, vous pouvez utiliser in_array() qui ne renvoie un simple oui/non sous forme booléenne:

if (in_array("image/gif", $allowedTypes)) { 
    // ... 
} 
+1

Ah, ha! Cela a un sens parfait. J'ai utilisé in_array() de toute façon, il semble que ce soit une fonction plus logique dans ce but. Merci –

2

Je pense que c'est ce que vous cherchez:

$allowedTypes = array(
    'image/gif', 
    'image/jpg', 
    'image/jpeg', 
    'image/png' 
); 
if(in_array("image/gif", $allowedTypes)) { 
    print "true"; 
} else { 
    print "false"; 
}