2009-05-07 15 views
14

Je souhaite identifier rapidement si une clé est présente dans une matrice, pour éviter de générer une erreur.Comment vérifier si une valeur de matrice profonde est présente

Par exemple, je pourrais avoir un tableau comme celui-ci

$arr['f']['b']['g'] = array('a', 'b', 'c',) ; 

Ou le tableau pourrait ne pas avoir de variables $ arr [ 'f'] [ 'b'] du tout:

$arr['f']['x'] = array() ; 

Comment puis-je éviter la répétition dans un test lorsque je référence le (peut-être) contenu de $ arr ['f'] ['b'] ['g']?

if (isset($arr['f']) && 
    isset($arr['f']['b']) && 
    isset($arr['f']['b']['g']) /* ... yawn */) { 
    /* blah */ 
} 

Il doit y avoir un moyen de déterminer si une valeur de tableau donnée que je référence existe? Il semble beaucoup trop verbeux de devoir tester la présence à la fois de la valeur que je recherche et de toute son ascendance. Dans certaines circonstances, cela a du sens, oui, mais pas tous.

Par exemple: il peut représenter, par exemple, user-> session-> panier, où je veux un moyen de vérifier rapidement si le panier a des entrées, sans avoir à inclure un contrôle pour chaque si l'utilisateur existe, si la session existe , alors que le panier existe, ...

Edit: Je ne cherche pas « fait une valeur de tableau avec un nom de clé de « g » existe », comme "fait une valeur de tableau avec une ascendance de f => b => g existe".

Répondre

25

Ce qui suit fonctionnera comme prévu:

if(isset($a['a']['b']['c'])) 

Si l'un de ces éléments ne sont pas définis isset() renvoie false.

+0

Huh! Bien repéré :) –

+3

Juste pour clarifier, cela aussi teste l'existence de '$ a': il retourne false si' $ a' n'est pas défini. –

+0

Wow, était sûr pendant des années que cela ne fonctionne pas. Lol. – baldrs

0

Dans les commentaires de array_search ils ont le code pour la recherche multidimensionnelle. Cela pourrait aider.

+0

Merci pour la réponse. Il y a plus d'une douzaine de blocs de code d'exemple sur cette page (plus, je n'ai pas compté), mais je ne peux pas voir lequel d'entre eux qui fournirait une solution qui serait efficace (soit en termes de performance). Je mettrai à jour la question pour clarifier ce que je veux. Merci encore! –

Questions connexes