2011-02-13 121 views
0

我试图访问第三方API,它给了我对象及子对象,例如打破:PHP foreach循环与子对象

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

当我试图通过循环使用下面的代码我的目标在子对象'us​​er'的开始处得到一个错误。任何人都可以帮助我1)遍历子对象,或者2)从循环中阻塞子对象。

代码:

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

感谢

+0

定义“破” – zerkms 2011-02-13 14:03:15

回答

0

这是因为'用户'字段是一个对象,因此您需要单独运行该对象中的每个字段。

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

感谢您的 - 除了使用跨三层功能,即对象 - 子对象-sub子对象和工作(并遵循如上命名约定) 。 – 2011-02-13 14:46:28

0
<?php 

function traceObject($object) {<br> 
    foreach ($object as $data => $name) {<br> 
    if (is_object($name)) {<br> 
     traceObject($name);<br> 
    } else {<br> 
     echo $data . ' - ' . $name ;<br> 
    }<br> 
    } 

} 
0

这将通过对象和打印键树遍历 - 值对...

printObject($test); 

function printObject($obj) { 
    foreach (get_object_vars($obj) as $field => $value) { 
     if (is_object($value)) { 
      printObject($value); 
     } else { 
      print $field . ' - ' . $value . '<br />'; 
     } 
    } 
}