53 votos

Comprobación de matrices vacías: contar vs vacío

Esta pregunta sobre"Cómo saber si un array de PHP está vacío' me tuvo pensando de esta pregunta

Hay una razón por la que count debe ser utilizado en lugar de empty la hora de determinar si una matriz es vacío o no?

Mi opinión personal sería si los 2 son equivalentes para el caso de matrices vacías debe utilizar empty porque le da un valor booleano respuesta a un valor booleano que se trate. A partir de la pregunta enlazado más arriba, parece que count($var) == 0 es el método popular. A mí, aunque técnicamente correcto, no tiene sentido. E. g. Q: $var, se vacía? R: 7. Hmmm...

Hay una razón por la que debo usar count == 0 lugar o simplemente una cuestión de gusto personal?

Como se ha señalado por los demás en los comentarios para un borrado de respuesta, count tendrá impactos en el rendimiento de grandes conjuntos, ya que tendrá que contar todos los elementos, mientras que empty puede parar tan pronto como se sabe que no está vacía. Así que, si no dan los mismos resultados en este caso, pero count es potencialmente ineficientes, ¿por qué hemos de utilizar jamás count($var) == 0?

52voto

prodigitalson Puntos 38549

Generalmente uso empty . Im no sé por qué la gente usaría Conde-si la matriz es grande entonces Conde lleva más tiempo / tiene más arriba. Si simplemente tienes que saber si es o no la matriz vacía utiliza vacío.

13voto

Creo que es sólo una preferencia personal. Algunas personas podrían decir empty es más rápido (por ejemplo, http://jamessocol.com/projects/count_vs_empty.php), mientras que otros podrían decir count es mejor, ya que fue hecho originalmente para las matrices. empty es más general y puede ser aplicado a otros tipos.

php.net da la siguiente advertencia para count pesar de que :

count() puede devolver 0 para una variable que no está fijado, pero también puede devolver 0 para una variable que ha sido inicializado con una matriz vacía. Usar isset() para comprobar si una variable está definida.

En otras palabras, si la variable no está definida, usted recibirá un aviso de PHP diciendo que es indefinido. Por lo tanto, antes de usar count, sería preferible comprobar la variable isset. Esto no es necesario con empty.

8voto

dev-null-dweller Puntos 19874

Hay una razón por la que el recuento debe ser utilizado en lugar de vaciar la hora de determinar si una matriz es vacío o no?

Hay, cuando lo que necesita hacer algo en la no-matriz vacía a sabiendas de su tamaño:

if( 0 < ( $cnt = count($array) ) )
{
 echo "Your array size is: $cnt";
}
else
 echo "Too bad, your array is empty :(";

Pero yo no recomendaría el uso de recuento, a menos que estés 100% seguro, de que lo que te están contando es una matriz. Últimamente he sido la depuración de código, donde en función de error regresaba FALSE en lugar de la matriz vacía, y lo que descubrí fue:

var_dump(count(FALSE));

salida:

int 1

Así que desde entonces estoy usando empty o if(array() === $array) para estar seguro de que he matriz que está vacía.

4voto

todofixthis Puntos 4206

Alternativamente, usted puede convertir la variable como un valor booleano (implícita o explícitamente):

if( $value )
{
  // array is not empty
}

if( (bool) $value )
{
  // array is still not empty
}

Este método genera un E_NOTICE si la variable no está definida, de manera similar a count().

Para obtener más información, consulte el Manual de PHP de la página en tipo de comparaciones.

3voto

Simon Puntos 497

Mi preferencia personal es más para la codificación de la elegancia (en relación a mi caso de uso). Estoy de acuerdo con Dan McG en la medida en que count() no responde con el correcto tipo de datos (en este caso booleano) para la prueba en cuestión, obligando al programador a escribir más código para llenar un 'if'.

Si esto tiene algún impacto significativo en el rendimiento sólo es discutible, por muy grandes matrices (que probablemente no tiene suficiente memoria para la asignación de todos modos en la mayoría de las configuraciones).

Sobre todo cuando se trata de PHP array de $_POST, parece mucho más "lógico" en mi opinión, para escribir/ver:

if ( !empty ( $_POST ) ) {
    // deal with postdata
}

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X