Algunas respuestas decentes, pero solo pensé en expandirme un poco para explicar más claramente cuando PHP determina si una matriz está vacía.
Notas principales:
PHP determinará una matriz con una clave (o claves) como NO vacía .
Como los valores de la matriz necesitan claves para existir, tener valores o no en una matriz no determina si está vacía, solo si no hay claves (Y, por lo tanto, no hay valores).
Por lo tanto, verificar una matriz con empty()
no solo le dice si tiene valores o no, le dice si la matriz está vacía y las claves son parte de una matriz.
Así que considere cómo está produciendo su matriz antes de decidir qué método de verificación usar.
Por ejemplo, una matriz tendrá claves cuando un usuario envíe su formulario HTML cuando cada campo de formulario tenga un nombre de matriz (es decir name="array[]"
).
Se generará una matriz no vacía para cada campo, ya que habrá valores clave de incremento automático para la matriz de cada campo de formulario.
Tome estos arreglos por ejemplo:
/* Assigning some arrays */
// Array with user defined key and value
$ArrayOne = array("UserKeyA" => "UserValueA", "UserKeyB" => "UserValueB");
// Array with auto increment key and user defined value
// as a form field would return with user input
$ArrayTwo[] = "UserValue01";
$ArrayTwo[] = "UserValue02";
// Array with auto incremented key and no value
// as a form field would return without user input
$ArrayThree[] = '';
$ArrayThree[] = '';
Si repite las claves y los valores de las matrices anteriores, obtendrá lo siguiente:
ARRAY ONE:
[UserKeyA] => [UserValueA]
[UserKeyB] => [UserValueB]
ARRAY TWO:
[0] => [UserValue01]
[1] => [UserValue02]
ARRAY TRES:
[0] => []
[1] => []
Y probar las matrices anteriores con empty()
devuelve los siguientes resultados:
ARRAY ONE:
$ ArrayOne no está vacío
ARRAY TWO:
$ ArrayTwo no está vacío
ARRAY THREE:
$ ArrayThree no está vacío
Una matriz siempre estará vacía cuando asigne una matriz, pero no la use a partir de entonces, como por ejemplo:
$ArrayFour = array();
Esto estará vacío, es decir, PHP devolverá VERDADERO cuando se use if empty()
en lo anterior.
Entonces, si su matriz tiene claves, ya sea por ejemplo, por los nombres de entrada de un formulario o si los asigna manualmente (es decir, cree una matriz con nombres de columnas de la base de datos como las claves pero sin valores / datos de la base de datos), entonces la matriz NO lo será empty()
.
En este caso, puede recorrer la matriz en un foreach, probando si cada clave tiene un valor. Este es un buen método si necesita ejecutar la matriz de todos modos, tal vez verificando las claves o desinfectando los datos.
Sin embargo, no es el mejor método si simplemente necesita saber "si existen valores" devuelve VERDADERO o FALSO . Existen varios métodos para determinar si una matriz tiene algún valor cuando se sabe que tendrá claves. Una función o clase puede ser el mejor enfoque, pero como siempre depende de su entorno y requisitos exactos, así como de otras cosas como lo que hace actualmente con la matriz (si corresponde).
Aquí hay un enfoque que usa muy poco código para verificar si una matriz tiene valores:
Uso array_filter()
:
Itera sobre cada valor en la matriz pasándolos a la función de devolución de llamada. Si la función de devolución de llamada devuelve verdadero, el valor actual de la matriz se devuelve a la matriz de resultados. Se conservan las claves de matriz.
$EmptyTestArray = array_filter($ArrayOne);
if (!empty($EmptyTestArray))
{
// do some tests on the values in $ArrayOne
}
else
{
// Likely not to need an else,
// but could return message to user "you entered nothing" etc etc
}
La ejecución array_filter()
en las tres matrices de ejemplo (creadas en el primer bloque de código en esta respuesta) da como resultado lo siguiente:
ARRAY ONE:
$ arrayone no está vacío
ARRAY TWO:
$ arraytwo no está vacío
ARRAY TRES:
$ arraythree está vacío
Entonces, cuando no hay valores, ya sea que haya claves o no, el uso array_filter()
para crear una nueva matriz y luego verificar si la nueva matriz está vacía muestra si hubo valores en la matriz original.
No es ideal y un poco desordenado, pero si tiene una gran matriz y no necesita recorrerla por ningún otro motivo, entonces este es el más simple en términos de código necesario.
No tengo experiencia en verificar gastos generales, pero sería bueno saber las diferencias entre usar array_filter()
y foreach
verificar si se encuentra un valor.
Obviamente, el punto de referencia debería estar en varios parámetros, en matrices pequeñas y grandes y cuando hay valores y no, etc.