Цикл Foreach со смешанными объектами и массивами stdClass - PullRequest
2 голосов
/ 21 ноября 2011

Здесь у меня есть вывод с веб-сайта, использующего Soap

stdClass Object 
( 
  [page] => 0 
  [items] => 3 
  [total] => 3 
  [saleItems] => stdClass Object 
  (
    [saleItem] => Array 
    (
      [0] => stdClass Object 
      ( 
        [reviewState] => open 
        [trackingDate] => 2011-11-03T01:06:43.547+01:00 
        [modifiedDate] => 2011-11-03T01:06:43.677+01:00 
        [clickDate] => 2011-10-30T22:57:57.383+01:00 
        [adspace] => stdClass Object 
        (
          [_] => Beslist.nl [id] => 1437603
        ) 
        [admedium] => stdClass Object 
        (
          [_] => 001. Program logo
          [id] => 535098
        ) 
        [program] => stdClass Object 
        (
          [_] => Zavvi NL
          [id] => 8991
        ) 
        [clickId] => 1565847253976339456 
        [clickInId] => 0 
        [amount] => 40.45 
        [commission] => 2.83 
        [currency] => EUR 
        [gpps] => stdClass Object 
        (
          [gpp] => Array 
          (
            [0] => stdClass Object 
            (
              [_] => shoplink 
              [id] => zpar0 
            ) 
          ) 
        ) 
        [trackingCategory] => stdClass Object 
        (
          [_] => Default
          [id] => 45181
        ) 
        [id] => 46a4f84a-ba9a-45b3-af86-da5f3ec29648 
      )
    )
  )
)

Я хочу получить данные (с циклом foreach) из программы, комиссии и gpp -> _. Я могу получить данные из программы и комиссии, как это:

foreach ($sales->saleItems->saleItem as $sale) {
  $programma    = $sale->program->_;
  $commissie    = $sale->commission;
}

Работает как шарм. Однако я не могу получить данные от gpp->_ (хочу иметь ссылку на магазин в качестве результата). В настоящее время у меня есть:

foreach ($sales->saleItems->saleItem->gpps->gpp as $tracking) {
  echo $tracking->_;
}

Я получаю ошибку «Попытка получить свойство необъекта». Я много пробовал, если вариации и не могу заставить его работать. Думаю, я действительно близко. У кого-нибудь есть решение?

1 Ответ

1 голос
/ 21 ноября 2011

Это должно работать

   foreach ($sales->saleItems->saleItem as $sale) {
        foreach($sale->gpps->gpp as $tracking) {
            echo $tracking->_;
    }

Поскольку saleItem является массивом, вы не сможете использовать цепочку для него.

...