2011-06-04 17 views
6

En este article, se menciona:cómo evitar la salida del error de foreach?

foreach no es compatible con la capacidad de suprimir mensajes de error usando '@'.

¿Cómo puedo evitar una salida foreach error? No quiero ver:

Advertencia: Invalid argument supplied for foreach()

¿Hay una manera de hacer un juicio if else?

+4

Es muy sencillo. Simplemente no proporcione argumentos inválidos a 'foreach'. Evite los errores, en lugar de suprimirlos. Su código no debe contener ningún '@' * en absoluto *. – Tomalak

Respuesta

5

Antes de verificación foreach si la variable contener array:

if (is_array($var)) 
{ 
    foreach... 
} 
+0

No necesita probar si la matriz está vacía, de lo contrario no habrá ningún error. –

+0

@ Matthieu, inténtalo. –

+1

Bien foreach en una matriz vacía no genera un error. Estoy loco ? '$ var = array(); foreach ($ var as $ elem) echo 'A'; 'no generará ningún error. –

5

prefijo la variable con un (array) como este.

foreach((array) $array_thats_not_an_array as $key => $value){ 
    echo $key . ' ' . $value; 
} 
+1

Encuentro más explícito tener un bloque 'if'. –

+0

¿Qué hará su código, si '$ array_thats_not_an_array' contendrá Object? ¿Recurso? ¿Qué pasa si '$ array_thats_not_an_array' contiene un tipo incorrecto porque el algoritmo se codificó con errores? El error se silenciará y será más difícil de encontrar. –

+1

Tiene toda la razón, no lo usaría en este tipo de fasion. Pero él no quería ver un error. "No quiero ver Advertencia: argumento inválido suministrado para foreach()";) –

0
if(!empty($array)) { 
    foreach($array as $a) { 
    // do something 
    } 
} 
+0

Debería comprobar que es una matriz. Si está vacío, no habrá ningún error, por lo que no es necesario que lo pruebe. –

+0

@Matthieu: ¿No está evitando un error exactamente lo que solicitó el afiche? – Tom

+0

Sí, ese es mi punto, comprobar si la matriz está vacía es inútil, porque incluso sin su prueba no habría un error –

Cuestiones relacionadas