Advertencia de PHP Argumento no válido suministrado para foreach()

Sheeraz Gul 8 octubre 2023
Advertencia de PHP Argumento no válido suministrado para foreach()

Este tutorial demuestra cómo arreglar el PHP Advertencia: Argumento no válido suministrado para foreach().

Advertencia de PHP: Argumento no válido suministrado para Foreach()

Cuando se usa el bucle foreach en PHP, a veces puede aparecer la advertencia Advertencia: Argumento no válido suministrado para foreach(). Esta advertencia se produce cuando proporcionamos un argumento no válido para el bucle foreach.

La razón común de este error es cuando intentamos pasar una cadena como valor al bucle foreach. El bucle foreach se usa para iterar sobre una matriz, pero cuando proporcionamos un valor que no es una matriz, arrojará la Advertencia: Argumento no válido suministrado para foreach().

Probemos un ejemplo simple que arroja este error:

<?php
$DemoString = "Hello! This is delftstack.com";
foreach($DemoString as $DemoValue){
    echo $DemoValue;
}
?>

El código anterior arrojará el error Argumento no válido suministrado para foreach() porque foreach() no puede iterar sobre una cadena.

Ver la salida:

Warning: Invalid argument supplied for foreach() in C:\Apache24\htdocs\demo.php on line 3

Debemos proporcionar una matriz al bucle foreach para solucionar este problema. Intentemos arreglar este ejemplo:

<?php
$DemoString = array("Hello!",  "This",  "is",  "delftstack.com");
foreach($DemoString as $DemoValue){
    echo $DemoValue."<br>";
}
?>

Ahora, como cambiamos la cadena a una matriz, esta advertencia debería corregirse. Ver la salida:

Hello!
This
is
delftstack.com

El argumento no válido proporcionado para foreach () no solo ocurre con una cadena, sino que cualquier valor que no sea iterable como la matriz arrojará la misma advertencia.

Aquí hay otro ejemplo en el que intentamos iterar sobre el valor de retorno de una función:

<?php
function DemoArray () {
    return false;
}

$DemoArray = DemoArray();

foreach($DemoArray as $DemoValue) {
    echo $DemoValue;
}
?>

Como podemos ver, la función DemoArray() está devolviendo falso, y tratamos de asignarla a una variable e iterar sobre ella usando el bucle foreach(). Debería arrojar la advertencia Invalid argument supplied for foreach().

Ver la salida:

Warning: Invalid argument supplied for foreach() in C:\Apache24\htdocs\demo.php on line 8

Idealmente, para solucionar este problema, el método DemoArray() debería devolver una matriz, pero a veces pueden ocurrir estas situaciones. Es mejor manejar estas situaciones con un valor predeterminado en lugar de solucionar el problema repetidamente.

Intentemos manejar esta situación con un valor predeterminado:

<?php
function DemoArray() {
    return false;
}

$DemoArray = DemoArray();

if (is_array($DemoArray) || is_object($DemoArray)) {

    foreach($DemoArray as $DemoValue){
        echo $DemoValue;
    }
}
// In case the above method is not working, we set a default value in the else, or we can perform any other operations.
else  {
	$DemoArray = array("Hello!",  "This",  "is",  "delftstack.com");
    foreach($DemoArray as $DemoValue){
        echo $DemoValue."<br>";
    }
}
?>

Ahora el ejemplo anterior se maneja correctamente. Entonces, siempre que ocurra la situación para el ciclo foreach, al menos deberíamos tener un valor predeterminado de la declaración de error.

Ver la salida:

Hello!
This
is
delftstack.com
Sheeraz Gul avatar Sheeraz Gul avatar

Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.

LinkedIn Facebook

Artículo relacionado - PHP Warning