phparraysloopsobjectforeach

How to iterate all levels of an array of objects nested in an array of objects in an object property?


object(stdClass)[1] 
  public 'inbox' =>  
    array 
      0 =>  
        object(stdClass)[2] 
          public 'from' => string '55512351' (length=8) 
          public 'date' => string '29/03/2010' (length=10) 
          public 'time' => string '21:24:10' (length=8) 
          public 'utcOffsetSeconds' => int 3600 
          public 'recipients' =>  
            array 
              0 =>  
                object(stdClass)[3] 
                  public 'address' => string '55512351' (length=8) 
                  public 'name' => string '55512351' (length=8) 
                  public 'deliveryStatus' => string 'notRequested' (length=12) 
          public 'body' => string 'This is message text.' (length=21) 
      1 =>  
        object(stdClass)[4] 
          public 'from' => string '55512351' (length=8) 
          public 'date' => string '29/03/2010' (length=10) 
          public 'time' => string '21:24:12' (length=8) 
          public 'utcOffsetSeconds' => int 3600 
          public 'recipients' =>  
            array 
              0 =>  
                object(stdClass)[5] 
                  public 'address' => string '55512351' (length=8) 
                  public 'name' => string '55512351' (length=8) 
                  public 'deliveryStatus' => string 'notRequested' (length=12) 
          public 'body' => string 'This is message text.' (length=21) 
      .... 
      .... 

I have this foreach, but it does not iterate address, name, deliveryStatus! Could you show how to get this data?

foreach ($data->inbox as $note) {
  echo '<p>';
  echo 'From : ' . htmlspecialchars($note->from) . '<br />';
  echo 'Date : ' . htmlspecialchars($note->date) . '<br />';
  echo 'Time : ' . htmlspecialchars($note->time) . '<br />';
  echo 'Body : ' . htmlspecialchars($note->body) . '<br />';
}

Solution

  • Address, name, deliveryStatus are in a child array so you need to iterate over the child array to be able to extract the data to print

    foreach ($data->inbox as $note) {
      echo '<p>';
      echo 'From : ' . htmlspecialchars($note->from) . '<br />';
      echo 'Date : ' . htmlspecialchars($note->date) . '<br />';
      echo 'Time : ' . htmlspecialchars($note->time) . '<br />';
      echo 'Body : ' . htmlspecialchars($note->body) . '<br />';
    
      //now iterate over the child array
      foreach ($note->recipients as $recipient) {
          echo 'x : ' . htmlspecialchars($recipient->address) . '<br />';
          echo 'y : ' . htmlspecialchars($recipient->name) . '<br />';
          echo 'z : ' . htmlspecialchars($recipient->$recipient->address) . '<br />';
      }
    }