Search code examples
phpjsonindexingsimplexmlphp-7.1

Pulling Array from PHP SimpleXMLElement


I want to pull an array out of a PHP SimpleXmlElement. The original SimpleXMLElement is structured like below:

object(SimpleXMLElement)[226]
  public 'GetLeadDetailResponse' => 
    object(SimpleXMLElement)[239]
      public 'GetLeadDetailResult' => 
        object(SimpleXMLElement)[240]
          public 'LeadStat' => 
            array (size=4294)

The xmlElement is stored in a vairable called $parser and I want to get all the way down to 'LeadStat' so I indexed with:

$leadStatInfo = $parser->GetLeadDetailResponse->GetLeadDetailResult;

Which returns me this object:

object(SimpleXMLElement)[4534]
  public 'LeadStat' => 
    array (size=4294)
      0 => 
        object(SimpleXMLElement)[240]
          public 'AdvertiserName' => string 'Modn Grp' (length=12)
          public 'AdvertiserId' => string '4539234' (length=6)
          public 'Timestamp' => string '2017-08-14T15:23:28.91' (length=22)
          public 'Type' => string 'Conversation' (length=15)
          public 'VisitId' => string '1442535353670' (length=9)
          public 'Attempt' => string '0' (length=1)
          public 'AgentName' => string 'Jack A' (length=6)
          public 'CustomerName' => string 'John Harris' (length=11)
          public 'CustomerEmail' => string '[email protected]' (length=25)
          public 'CustomerPhone' => 
            object(SimpleXMLElement)[4535]
              ...
          public 'CustomerAddress' => 
            object(SimpleXMLElement)[4536]
              ...
          public 'NumberOfMessages' => string '12' (length=2)
      1 => 
        object(SimpleXMLElement)[4533]
          public 'AdvertiserName' => string 'Modn Grp' (length=12)
          public 'AdvertiserId' => string '4539234' (length=6)
          public 'Timestamp' => string '2017-08-14T17:21:11.157' (length=23)
          public 'Type' => string 'Conversation' (length=15)
          public 'VisitId' => string '37836763725' (length=9)
          public 'Attempt' => string '0' (length=1)
          public 'CustomerAddress' => 
            object(SimpleXMLElement)[4536]
              ...
          public 'NumberOfMessages' => string '0' (length=1)
      more elements...

Now I would like to get the LeadStat array and json_encode it so I have tried the following:

json_encode($leadStatInfo->LeadStat)

This unfortunately only returned one object instead of all the objects in the array.

{
  "AdvertiserName":"Modn Grp",
  "AdvertiserId":"4539234",
  "Timestamp":"2017-08-14T15:23:28.91",
  "Type":"Conversation",
  "VisitId":"1442535353670",
  "Attempt":"0",
  "AgentName":"Jack A",
  "CustomerName":"John Harris",
  "CustomerEmail":"[email protected]",
  "CustomerPhone":{},
  "CustomerAddress":{},
  "NumberOfMessages":"12"
}

How do I pull out the full array?

Is this because the objects in the array don't have the same attributes?


Solution

  • In SimpleXML, the $leadStatInfo->LeadStat is not really an array, but an iterable element. To get all the items in LeadStatyou need to iterate over it.

    $leadStatArray = array();
    foreach($leadStatInfo->LeadStat as $leadStat) {
        $leadStatArray[] = $leadStat;
    }
    json_encode($leadStatArray);