【问题标题】:PHP foreach loop breaking with sub objectPHP foreach 循环中断子对象
【发布时间】:2011-02-13 13:23:32
【问题描述】:

我正在尝试访问给我对象和子对象的第三方 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 />';
}

谢谢

【问题讨论】:

    标签: php object foreach


    【解决方案1】:

    因为 '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
    

    【讨论】:

    • 感谢您 - 此外使用了跨三层的功能,即对象 - 子对象 - 子子对象和工作(并遵循上述命名约定)。
    【解决方案2】:

    这将遍历对象树并打印键值对...

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

    【讨论】:

      【解决方案3】:
      <?php
      
      function traceObject($object) {
        foreach ($object as $data => $name) {
          if (is_object($name)) {
            traceObject($name);
          } else {
            echo $data . ' - ' . $name .'<br />';
          }
        }
      }
      

      【讨论】:

        猜你喜欢
        • 2011-06-19
        • 2013-05-20
        • 2013-06-10
        • 1970-01-01
        • 1970-01-01
        • 2018-04-02
        • 2015-05-06
        • 1970-01-01
        • 2012-05-02
        相关资源
        最近更新 更多