2011-11-30 26 views
198

tengo el siguiente códigoCompruebe si una matriz está vacía

<?php 

$error = array(); 
$error['something'] = false; 
$error['somethingelse'] = false; 

if (!empty($error)) 
{ 
    echo 'Error'; 
} 
else 
{ 
    echo 'No errors'; 
} 

?> 

Sin embargo, sigue devolviendo empty($error)true, a pesar de que no hay nada escrito.

¿Qué no está bien?

+6

Funciona correctamente para mí en PHP 5.3 en Windows - Me sale 'Error' –

+0

http://stackoverflow.com/questions/4139301/ php-0-as-a-string-with-empty check answer no 2 –

+0

¿El resultado de este código es "Error" o "No hay errores"? –

Respuesta

370

Hay dos elementos en la matriz y esto definitivamente no significa que la matriz está vacía. Como una solución rápida que puede hacer lo siguiente: comportamiento predeterminado

$errors = array_filter($errors); 

if (!empty($errors)) { 
} 

array_filter() de la función eliminará todos los valores de la matriz que son iguales a null, 0, '' o false.

De lo contrario, en su caso particular empty() constructo siempre devolverá true si hay al menos un elemento incluso con valor "vacío".

+1

Gracias. Creo que puedo haber formulado mal mi pregunta, pero entendiste lo que quería decir y me brindó la solución. – gbhall

+2

array_filter ($ input) también elimina las matrices vacías de $ input. – jan

+49

Esto podría reducirse a 'if (array_filter ($ errors)) {}' – techouse

16

Intenta comprobar el tamaño con sizeof si 0 no hay elementos.

+17

'sizeof' es un alias de' count'. –

+7

Recordatorio: 'sizeof' está en la lista de desactivación, consulte https://wiki.php.net/rfc/deprecations_php_7_1 –

2

Desde el PHP-documentación:

devuelve falso si var tiene un valor que no esté vacío y que no sea cero.

Los siguientes factores son considerados como vacío:

"" (an empty string) 
0 (0 as an integer) 
0.0 (0 as a float) 
"0" (0 as a string) 
NULL 
FALSE 
array() (an empty array) 
var $var; (a variable declared, but without a value in a class) 
+0

Fuente http://php.net/manual/de/function.empty.php – user706420

4

Sin embargo, vacío ($ error) sigue devolviendo cierto, aunque no hay nada escrito.

Así no es como funciona empty(). De acuerdo con manual, devolverá true en una matriz vacía solamente. Cualquier otra cosa no tendría sentido.

61

También puede verificarlo haciendo.

if(count($array) > 0) 
{ 
    echo 'Error'; 
} 
else 
{ 
    echo 'No Error'; 
} 
+5

No lo hace necesita contar los elementos o usar empty(). Un único trazador de líneas como php -r 'echo array()? "T": "F"; ' mostrará la veracidad de una matriz vacía o no vacía. – jerseyboy

+0

empty() maneja FALSE y isset(), por lo que es posible que desee empty() por ese motivo. –

0

no puede replicar que (PHP 5.3.6):

php > $error = array(); 
php > $error['something'] = false; 
php > $error['somethingelse'] = false; 
php > var_dump(empty($error)); 
bool(false) 

php > $error = array(); 
php > var_dump(empty($error)); 
bool(true) 
php > 

exactamente donde estás haciendo la llamada empty() que devuelve cierto?

1
<?php 
if(empty($myarray)) 
echo"true"; 
else 
echo "false"; 
?> 
13

de PHP integrado empty() función comprueba para ver si la variable está vacía, nula, falsa, o una representación de cero. No devuelve verdadero solo porque el valor asociado con una entrada de matriz es falso, en este caso la matriz tiene elementos reales y eso es todo lo que se evalúa.

Si desea comprobar si una determinada condición de error se establece en cierto en una matriz asociativa, puede utilizar la función array_keys() para filtrar las llaves que tienen su valor TRUE.

$set_errors = array_keys($errors, true); 

A continuación, puede utilizar la función de vacío() para comprobar si esta matriz está vacía, a la vez que indica si hay errores y también que se hayan producido errores.

2

función empty() ¡no funciona para probar matrices vacías! ejemplo:

$a=array("",""); 
if(empty($a)) echo "empty"; 
else echo "not empty"; //this case is true 

es necesaria una función:

function is_array_empty($a){ 
foreach($a as $elm) 
if(!empty($elm)) return false; 
return true; 
} 

bien, esta es una pregunta muy antigua :), pero he encontrado este hilo en busca de una solución y no encontré una buena.

bye (lo siento por mi Inglés)

+0

Esta es la mejor forma de comprobación vacía de matriz.O puede usar $ set_errors = array_keys ($ errors, true); –

1

array hi es un objeto por lo que tipo nulo o blanco

<?php 
     if($error!=null) 
      echo "array is blank or null or not array"; 
    //OR 
     if(!empty($error)) 
      echo "array is blank or null or not array"; 
    //OR 
    if(is_array($error)) 
      echo "array is blank or null or not array"; 
    ?> 
1

En PHP, incluso si los artículos individuales dentro de una matriz o propiedades de un objeto están vacíos, la matriz u objeto no se evaluará como vacío utilizando la función empty($subject). En otras palabras, armar un conjunto de datos que individualmente se prueban como "vacíos" crea un compuesto que no está vacío. utilizar la siguiente función PHP para determinar si los elementos de una matriz o propiedades de un objeto están vacías:

function functionallyEmpty($o) 
{ 
    if (empty($o)) return true; 
    else if (is_numeric($o)) return false; 
    else if (is_string($o)) return !strlen(trim($o)); 
    else if (is_object($o)) return functionallyEmpty((array)$o); 

    // If it's an array! 
    foreach($o as $element) 
    if (functionallyEmpty($element)) continue; 
    else return false; 

    // all good. 
    return true; 
} 

Ejemplo de Uso:

$subject = array('', '', ''); 

empty($subject); // returns false 
functionallyEmpty($subject); // returns true 

class $Subject { 
    a => '', 
    b => array() 
} 

$theSubject = new Subject(); 

empty($theSubject); // returns false 
functionallyEmpty($theSubject); // returns true 
+0

Esto no funciona para al menos entradas que contienen valores bool (verdaderos). Mejor escríbalo así: https://pastebin.com/DnFtDWgH – mermshaus

5

matriz con elementos cero se convierte en falsa

http://php.net/manual/en/language.types.boolean.php

+3

Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace de referencia. Las respuestas de solo enlace pueden dejar de ser válidas si la página vinculada cambia. – mathielo

Cuestiones relacionadas