Разрыв цикла foreach в PHP с подчиненным объектом - PullRequest
0 голосов
/ 13 февраля 2011

Я пытаюсь получить доступ к стороннему API, который дает мне объект и подобъект, например:

stdClass Object
(
    [truncated] => 
    [text] => "some text"
    [user] => stdClass Object
        (
            [count] => 9370
            [comments_enabled] => yes

Когда я пытаюсь перебрать объект с помощью следующего кода, я получаю сообщение об ошибке наначало подобъекта «пользователь».Может ли кто-нибудь помочь мне: 1) перебрать подобъект или 2) заблокировать подобъект из цикла.

Код:

$test = $s[0];
$obj = new ArrayObject($test);
foreach ($obj as $data => $name) {
print $data . ' - ' . $name . '<br />';
}

спасибо

Ответы [ 3 ]

0 голосов
/ 13 февраля 2011

Это будет перебирать дерево объектов и выводить пары ключ-значение ...

printObject($test);

function printObject($obj) {
    foreach (get_object_vars($obj) as $field => $value) {
        if (is_object($value)) {
            printObject($value);
        } else {
            print $field . ' - ' . $value . '<br />';
        }
    }
}
0 голосов
/ 13 февраля 2011

Это потому, что поле 'user' является объектом, поэтому вам нужно отдельно проходить через каждое поле в этом объекте

function iterateObject($obj, $name='') {

  //for each element        
  foreach ($obj as $key=>$val) {
    $myName = ($name !='') ? "$name.$key" : $key;

    //if type of the element is an object or array 
    if ( is_object($val) || is_array($val) ) {
      //if so, iterate through its properties
      iterateObject($val, $myName);
    }
    //otherwise output name/ value combination
    else {
      print "$myName - $val <br/>";
    }

  }

}

$test = $s[0];
$obj = new ArrayObject( $test );
iterateObject( $obj );

Будет выводить

truncated - 
text - some text
user.count - 9370
user.comments_enabled - yes
0 голосов
/ 13 февраля 2011
<?php

function traceObject($object) {
  foreach ($object as $data => $name) {
    if (is_object($name)) {
      traceObject($name);
    } else {
      echo $data . ' - ' . $name .'<br />';
    }
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...