Tema: foreach
Ver Mensaje Individual
  #9 (permalink)  
Antiguo 26/02/2017, 12:08
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: foreach

La estructura de lo que tienes, viene siendo lo mismo que el resultado de esto:
Código PHP:
Ver original
  1. $arr = [];
  2.  
  3. $obj1 = new stdClass();
  4. $obj1->item1 = 'sí';
  5. $obj1->item2 = 'no';
  6. $obj1->item3 = [];
  7.  
  8. $obj2 = new stdClass();
  9. $obj2->color = 'azul';
  10. $obj2->tipo = 'círculo';
  11.  
  12. $obj3 = new stdClass();
  13. $obj3->color = 'rojo';
  14. $obj3->tipo = 'triángulo';
  15.  
  16. $obj4 = new stdClass();
  17. $obj4->color = 'verde';
  18. $obj4->tipo = 'cuadrado';
  19.  
  20. array_push($obj1->item3, $obj2, $obj3, $obj4);
  21. $arr[] = $obj1;
Código HTML:
Ver original
  1. Array
  2. (
  3.     [0] => stdClass Object
  4.         (
  5.             [item1] => sí
  6.             [item2] => no
  7.             [item3] => Array
  8.                 (
  9.                     [0] => stdClass Object
  10.                         (
  11.                             [color] => azul
  12.                             [tipo] => círculo
  13.                         )
  14.  
  15.                     [1] => stdClass Object
  16.                         (
  17.                             [color] => rojo
  18.                             [tipo] => triángulo
  19.                         )
  20.  
  21.                     [2] => stdClass Object
  22.                         (
  23.                             [color] => verde
  24.                             [tipo] => cuadrado
  25.                         )
  26.  
  27.                 )
  28.  
  29.         )
  30.  
  31. )

Sabiendo esto, opto por volver a la recursividad para mostrar todos los elementos:
Código PHP:
Ver original
  1. function printArrObj($param){
  2.     if (is_array($param) || is_object($param)){
  3.         foreach ($param as $key => $value){
  4.             if (is_array($value) || is_object($value)){
  5.                 echo $key . ": \n";
  6.                 printArrObj($value);
  7.             }
  8.             else{
  9.                 echo $key . ': ' . $value . "\n";
  10.             }
  11.         }
  12.     }
  13.     else{
  14.         echo 'No se ha proporcionado ningún arreglo u objeto';
  15.     }
  16. }
Obteniendo el siguiente resultado:
Código HTML:
Ver original
  1. 0:
  2. item1: sí
  3. item2: no
  4. item3:
  5. 0:
  6. color: azul
  7. tipo: círculo
  8. 1:
  9. color: rojo
  10. tipo: triángulo
  11. 2:
  12. color: verde
  13. 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 original
  1. echo 'color: ' . $arr[0]->item3[1]->color; //Se imprime "color: rojo"

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand