the - PHP: prueba de existencia de una celda en una matriz multidimensional
php array ubound (2)
Estaba teniendo el mismo problema, excepto que lo necesitaba para algunas cosas de Drupal. También necesitaba verificar si los objetos contenían elementos o matrices. Aquí está el código que hice, es una búsqueda recursiva que busca ver si los objetos contienen tanto el valor como las matrices. Pensé que alguien podría encontrarlo útil.
function recursiveIsset($variable, $checkArray, $i=0) {
$new_var = null;
if(is_array($variable) && array_key_exists($checkArray[$i], $variable))
$new_var = $variable[$checkArray[$i]];
else if(is_object($variable) && array_key_exists($checkArray[$i], $variable))
$new_var = $variable->$checkArray[$i];
if(!isset($new_var))
return false;
else if(count($checkArray) > $i + 1)
return recursiveIsset($new_var, $checkArray, $i+1);
else
return $new_var;
}
Uso: por ejemplo
recursiveIsset($variables, array(''content'', ''body'', ''#object'', ''body'', ''und''))
En mi caso en drupal, esto fue para mí que existía la siguiente variable
$variables[''content''][''body''][''#object'']->body[''und'']
Tenga en cuenta que el hecho de que ''#object'' se llame objeto no significa que lo sea. Mi búsqueda recursiva también sería verdadera si existiera esta ubicación
$variables->content->body[''#object'']->body[''und'']
Tengo una matriz con numerosas dimensiones, y quiero probar la existencia de una celda.
El siguiente enfoque en cascada, será seguramente una forma segura de hacerlo:
if (array_key_exists($arr, ''dim1Key''))
if (array_key_exists($arr[''dim1Key''], ''dim2Key''))
if (array_key_exists($arr[''dim1Key''][''dim2Key''], ''dim3Key''))
echo "cell exists";
Pero, ¿hay una manera más simple?
Voy a entrar en más detalles sobre esto:
- ¿Puedo realizar este control en una sola declaración?
- ¿Debo usar array_key_exist o puedo usar algo como isset? ¿Cuándo uso cada uno y por qué?
isset()
es el método canónico de prueba, incluso para matrices multidimensionales. A menos que necesite saber exactamente qué dimensión falta, entonces algo como
isset($arr[1][2][3])
es perfectamente aceptable, incluso si los elementos [1]
y [2]
no están allí (3 no pueden existir a menos que 1 y 2 estén allí).
Sin embargo, si tiene
$arr[''a''] = null;
entonces
isset($arr[''a'']); // false
array_key_exists(''a'', $arr); // true
comentario de seguimiento:
Tal vez esta analogía ayudará. Piense en una variable de PHP (una variable real, un elemento de matriz, etc.) como una caja de cartón:
-
isset()
mira dentro del cuadro y se da cuenta si el contenido del cuadro puede ser encasillado a algo que es "no nulo". No importa si la caja existe o no, solo se preocupa por el contenido de la caja. Si el cuadro no existe, obviamente no puede contener nada. -
array_key_exists()
comprueba si el cuadro existe o no. El contenido de la caja es irrelevante, está buscando rastros de cartón.