Ojo con el código de @EdePC ya que hay un par de cosas que no se aconsejan o directamente están mal en PHP 7.2+.
Lo que esta mal (en versiones de PHP 7.2+) es que se está utilizado count sobre objetos que pueden no ser contables. A partir de 7.2,
count lanzará un Warning si el parámetro no implementa Countable. Además count puede ser muy confuso pues
count('abc') además de lanzar un warning, devuelve true en forma de integro (1). Por tanto, ese código tiene un comportamiento indeseado. Por ejemplo, si
$array resulta ser un string:
$array = 'tarta';
t => t
count(): Parameter must be an array or an object that implements Countable on line 4
https://www.php.net/manual/es/migration72.incompatible.php
El segundo problema es un más bien una practica desaconsejada. Meter
count en el propio
for como comparador, implica que cada vez que haga un ciclo, la función se volverá a ejecutar y por lo tanto, volverá a calcular el tamaño del array con el procesamiento que ello conlleva. Consideramos esto por ejemplo:
function _count($item) {
echo ' conteo ';
}
$array = array("valor1", "valor2", "valor3", "valor4");
for ($i = 0; $i < _count($array); $i++) {
echo $array[$i];
}
Resultado:
conteo valor1 conteo valor2 conteo valor3 conteo valor4 conteo
Si el array no varia durante el proceso o no hace falta volver a calcular su tamaño en cada ciclo, es mejor hacer el conteo previamente.
for ($i = 0, $max = _count($array); $i < $max; $i++) {
echo $array[$i];
}
conteo valor1valor2valor3valor4
Lo que te dan en problema que se te presenta, se llama array multidimensional mixto. PHP no es fuertemente tipado por lo tanto una matriz (array) puede contener cualquier cosa dentro de ella incluidas otras matrices (multidimensional) y valores de diferentes tipos (mixto).
https://www.w3schools.com/php/php_arrays_multi.asphttps://www.guru99.com/arrays.htmlSi es obligatorio que uses for (tal y como sugiere el ejercicio) puedes hacerlo como ha mostrado @EdePC.
for ($i = 0, $max_i = count($array); $i < $max_i; $i++) {
echo $array[$i];
continue; // salto al siguiente ciclo
}
for ($j = 0, $max_j = count($array[$i]); $j < $max_j; $j++) { echo $array[$i][$j];
}
}
Esto será válido solo para un array de 2 dimensiones. Puedes crear una función y hacerla recursiva para recorrer arrays de multiples dimensiones:
function recorrer($array)
{
for ($i = 0, $max = count($array); $i < $max; $i++) { recorrer($array[$i]);
continue;
}
echo $array[$i];
}
}
$array = array("valor1", 1234, array("cero", "uno", "dos", "tres")); recorrer($array);
//valor11234cerounodostres
Cabe destacar que PHP ya implementa funciones muy útiles para iterar arrays. Por ejemplo, en tu caso
array_walk_recursive te viene al pelo.
function echo_value($value, $key) {
echo $value;
}
$array = array("valor1", 1234, array("cero", "uno", "dos", "tres")); //valor11234cerounodostres
o de forma más compacta con funciones anónimas:
$array = array("valor1", 1234, array("cero", "uno", "dos", "tres"));
echo $value;
});
//valor11234cerounodostres
https://www.php.net/manual/es/function.array-walk-recursive.phphttps://www.php.net/manual/es/functions.anonymous.phpSaludos