【问题标题】:iterating through a stdClass object in PHP遍历 PHP 中的 stdClass 对象
【发布时间】:2013-04-23 15:48:16
【问题描述】:

我有一个这样的对象:

stdClass Object
(
    [_count] => 10
    [_start] => 0
    [_total] => 37
    [values] => Array
        (
            [0] => stdClass Object
                (
                    [_key] => 50180
                    [group] => stdClass Object
                        (
                            [id] => 50180
                            [name] => CriticalChain
                        )

                )

            [1] => stdClass Object
                (
                    [_key] => 2357895
                    [group] => stdClass Object
                        (
                            [id] => 2357895
                            [name] => Data Modeling
                        )

                )

            [2] => stdClass Object
                (
                    [_key] => 1992105
                    [group] => stdClass Object
                        (
                            [id] => 1992105
                            [name] => SQL Server Users in Israel
                        )

                )

            [3] => stdClass Object
                (
                    [_key] => 37988
                    [group] => stdClass Object
                        (
                            [id] => 37988
                            [name] => CDO/CIO/CTO Leadership Council
                        )

                )

            [4] => stdClass Object
                (
                    [_key] => 4024801
                    [group] => stdClass Object
                        (
                            [id] => 4024801
                            [name] => BiT-HR, BI & IT Placement Agency
                        )

                )

            [5] => stdClass Object
                (
                    [_key] => 37845
                    [group] => stdClass Object
                        (
                            [id] => 37845
                            [name] => Israel Technology Group
                        )

                )

            [6] => stdClass Object
                (
                    [_key] => 51464
                    [group] => stdClass Object
                        (
                            [id] => 51464
                            [name] => Israel DBA's
                        )

                )

            [7] => stdClass Object
                (
                    [_key] => 66097
                    [group] => stdClass Object
                        (
                            [id] => 66097
                            [name] => SQLDBA
                        )

                )

            [8] => stdClass Object
                (
                    [_key] => 4462353
                    [group] => stdClass Object
                        (
                            [id] => 4462353
                            [name] => Israel High-Tech Group
                        )

                )

            [9] => stdClass Object
                (
                    [_key] => 4203807
                    [group] => stdClass Object
                        (
                            [id] => 4203807
                            [name] => Microsoft Team Foundation Server
                        )

                )

        )

)

我需要在 HTML 表中获取 id 和 name,但我似乎很难遍历这个对象。 TIA。我知道我需要到达 Values Array,然后到达 group 对象,但是我在对象和数组之间的转换以及基于 foreach 和基于索引的迭代之间绊倒了。

例如我试过这个:

foreach ($res as $values) { print "\n"; print_r ($values); } 

它遍历对象,但它也让我无用

10 0 37

【问题讨论】:

  • 你会展示你的尝试并解释你的尝试如何不符合你的期望吗?
  • 当然。例如我试过这个: foreach ($res as $values) { print "\n"; print_r ($values);它遍历对象,但它也给了我无用的 10 0 37
  • foreach ($object->values as $arr) ....
  • 谢谢@adeneo,这让我更进一步:foreach ($res->values as $values) { print "\n"; foreach ($values->group as $groups) { 但我被困在这里。 $groups 不是数组。如果我尝试通过索引访问它,我会得到 5C 2D 1S 3C 4B 3I 5I 6S 4I 4M ...
  • @MorDeror - 发布了一些代码,试试看 =

标签: php arrays json stdclass


【解决方案1】:
foreach($res->values as $value) {
    print_r($value);
}

【讨论】:

    【解决方案2】:
    echo "<table>"
    
    foreach ($object->values as $arr) {
        foreach ($arr as $obj) {
            $id   = $obj->group->id;
            $name = $obj->group->name;
    
            $html  = "<tr>";
            $html .=    "<td>Name : $name</td>";
            $html .=    "<td>Id   : $id</td>";
            $html .= "</tr>";
        }
    }
    
    echo "</table>";
    

    【讨论】:

    • 你去吧,我只是在猜测那里的表格结构,但如果你让它工作,那就是重要的部分。
    【解决方案3】:
    function objectToArray( $data ) 
    {
        if ( is_object( $data ) ) 
            $d = get_object_vars( $data );
    }
    

    先将Object转为数组,如:

    $results = objectToArray( $results );
    

    并使用

    foreach( $results as result ){... ...}
    

    【讨论】:

    • return 语句在哪里?
    【解决方案4】:

    我知道这是一篇旧帖子,但为了其他人: 使用 stdClass 时,您应该使用 Reflections

      $obj = new ReflectionObject($object);
    
      $propeties = $obj->getProperties();
    
          foreach($properties as $property) {
            $name = $property->getName();  <-- this is the reflection class
            $value = $object->$name;       <--- $object is your original $object
    
                here you need to handle the result (store in array etc)
    
    
    
            }
    

    【讨论】:

    • 对我来说就像一个魅力。请注意,此示例使用了一个插值对象属性名称 $object->$name,它是在上面的行中设置的。
    【解决方案5】:

    如果您搜索iterate over stdclass,这是Google 中的最高结果,因此回答标题中的问题可能会有所帮助:

    您可以简单地使用 foreach 来迭代一个标准类:

    $user = new \stdClass();
    $user->flag = 'red';
    
    foreach ($user as $key => $value) {
       // $key is `flag`
       // $value is `red`
    }
    

    【讨论】:

      猜你喜欢
      • 2014-06-18
      • 1970-01-01
      • 2015-10-24
      • 2014-01-31
      • 2013-05-12
      • 2020-07-02
      • 2011-08-31
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多