2009-05-07 11 views
14

Quiero identificar rápidamente si una clave está presente en una matriz, para evitar arrojar un error.Cómo verificar si un valor de matriz profunda está presente

Por ejemplo, podría tener una serie como esta

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

O la matriz podría no tener ninguna variable en $ matriz [ 'f'] [ 'b'] en absoluto:

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

¿Cómo puedo evitar la repetición en una prueba al hacer referencia al (quizás) contenido de $ arr ['f'] ['b'] ['g']?

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

Debe existir una forma más simple de identificar si existe un valor de matriz dado al que estoy haciendo referencia. Parece demasiado verboso tener que probar la presencia tanto del valor que busco, como de todos sus ancestros. En algunas circunstancias, eso tiene sentido, sí, pero no todo.

Por ejemplo: se puede representar, por ejemplo, el usuario> session-> carro, donde quiero una manera de comprobar rápidamente si el carrito tiene entradas, sin tener que incluir un cheque cada uno por si el usuario existe, entonces si existe o no la sesión, entonces si existe el carrito , entonces ...

Editar: no estoy buscando "hace un valor de matriz con un nombre clave de 'g' existen", como "existe un valor de matriz con un ancestro de f => b => g".

Respuesta

25

El siguiente trabajo como se esperaba:

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

Si cualquiera de estos elementos no están definidos, isset() volverá falsa.

+0

¡Huh! Bien visto :) –

+3

Solo para aclarar, esto también prueba de forma segura la existencia de '$ a': devuelve falso si' $ a' no está establecido. –

+0

Wow, estuvo seguro durante años que esto no funciona. Lol. – baldrs

0

En los comentarios de array_search tienen código para la búsqueda multidimensional. Podría ayudar.

+0

Gracias por la respuesta. Hay más de una docena de bloques de código de ejemplo en esa página (más, no conté), pero no puedo ver cuál de ellos proporcionaría una solución que sería eficiente (ya sea en términos de concisión, o actuación). Se actualizará la pregunta para aclarar lo que estoy buscando. ¡Gracias de nuevo! –

Cuestiones relacionadas