La estructura de lo que tienes, viene siendo lo mismo que el resultado de esto:
Código PHP:
Ver original$arr = [];
$obj1 = new stdClass();
$obj1->item1 = 'sí';
$obj1->item2 = 'no';
$obj1->item3 = [];
$obj2 = new stdClass();
$obj2->color = 'azul';
$obj2->tipo = 'círculo';
$obj3 = new stdClass();
$obj3->color = 'rojo';
$obj3->tipo = 'triángulo';
$obj4 = new stdClass();
$obj4->color = 'verde';
$obj4->tipo = 'cuadrado';
$arr[] = $obj1;
Código HTML:
Ver originalArray
(
[0] => stdClass Object
(
[item1] => sí
[item2] => no
[item3] => Array
(
[0] => stdClass Object
(
[color] => azul
[tipo] => círculo
)
[1] => stdClass Object
(
[color] => rojo
[tipo] => triángulo
)
[2] => stdClass Object
(
[color] => verde
[tipo] => cuadrado
)
)
)
)
Sabiendo esto, opto por volver a la recursividad para mostrar todos los elementos:
Código PHP:
Ver originalfunction printArrObj($param){
foreach ($param as $key => $value){
echo $key . ": \n";
printArrObj($value);
}
else{
echo $key . ': ' . $value . "\n";
}
}
}
else{
echo 'No se ha proporcionado ningún arreglo u objeto';
}
}
Obteniendo el siguiente resultado:
Código HTML:
Ver original0:
item1: sí
item2: no
item3:
0:
color: azul
tipo: círculo
1:
color: rojo
tipo: triángulo
2:
color: verde
tipo: cuadrado
Básicamente averiguamos en cada iteración si estamos ante un arreglo o un objeto y lo iteramos volviendo a ejecutar la función pero pasándole como argumento al elemento actual en la iteración, caso contrario, imprimimos el índice y valor encontrado.
DEMO
De esta manera se puede mostrar toda la información contenida en el arreglo principal. Ahora, si deseas acceder a un valor en particular, tendrías que guiarte por los índices:
Código PHP:
Ver originalecho 'color: ' . $arr[0]->item3[1]->color; //Se imprime "color: rojo"