Cita:
Iniciado por Alexis88
Siendo esa la estructura del arreglo y considerando que, así como hay elementos que también son arreglos, puede haber más elementos internos dentro de los arreglos internos que también sean arreglos; o sea, arreglos dentro de arreglos dentro de arreglos.
Para estos casos, la recursión es precisa:
Código PHP:
Ver originalfunction printArr($array){
foreach($array as $key => $value){ //Recorremos el arreglo principal
if (is_array($value)){ //Si es un arreglo echo $key . ': [' . printArr($value) . "\r\n" . ']'; //Se imprime el índice que ocupa y se ejecuta el llamado de la función
}
else{ //Caso contrario
$object = json_decode($value); //Decodificamos la supuesta cadena JSON if (!is_null($object)){ //Si lo anterior no es nulo, se trata de un objeto echo $key . ': {' . "\r\n"; //Imprimimos el índice en el que se encuentra
foreach ($object as $k => $v){ //Y lo recorremos
if (is_array($v)){ //Si el valor es un arreglo echo $k . ': [' . printArr($v) . "\r\n ]"; //Se imprime el índice que ocupa y se ejecuta el llamado de la función
}
else{ //Caso contrario
echo $k . ': ' . $v . "\r\n"; //Se imprime el índice y valor
}
}
echo "\r\n" . '}'; //Se imprime el cierre del objeto
}
else{ //Caso contrario
echo $key . ': ' . $value . "\r\n"; //Se imprime el índice y valor
}
}
}
}
DEMO 
asi es como me lo muestra:
item1: si item2: no color: azul tipo: circulo 0: [ ]color: rojo tipo: triangulo 1: [ ]color: verde tipo: cuadrado 2: [ ]item3: [ ]0: [ ]