【问题标题】:looping through a object which contains an object php循环遍历包含对象 php 的对象
【发布时间】:2010-12-07 00:24:00
【问题描述】:

我有一个包含其他对象的 PHP 对象

$obj->sec_obj->some_var;

我想使用 foreach 循环遍历对象和所有对象对象。我认为最高等级是3,所以

$obj->sec_obj->third_obj->fourth_obj

有什么想法吗?

【问题讨论】:

    标签: php object foreach


    【解决方案1】:

    为 slikts 解决方案添加了对数组的支持

    function loop($obj, $path = [])
    {
        $parent = $path;
    
        if (is_object($obj)) {
            foreach ($obj as $key => $value) {
                loop($value, array_merge($parent, [$key]));
            }
        } elseif (is_array($obj)) {
            foreach ($obj as $index => $value) {
                loop($value, array_merge($parent, [$index]));
            }
        } else {
            echo join('.', $path) . ": $obj" . PHP_EOL;
        }
    }
    

    例子:

    $o = (object) [
        "name" => "sample document",
        "items" => [
            (object) [
                "type" => "text",
                "placeholder" => "type it"
            ]
        ]
    ];
    
    loop($o);
    

    输出:

    name: sample document
    items.0.type: text
    items.0.placeholder: type it
    

    【讨论】:

      【解决方案2】:

      这只是基本的递归。

      function loop($obj)
      {
          if (is_object($obj)) {
              foreach ($obj as $x) {
                  loop($x);
              }
          } else {
              // do something
          }
      }
      

      编辑:打印键值对:

      function loop($obj, $key = null)
      {
          if (is_object($obj)) {
              foreach ($obj as $x => $value) {
                  loop($value, $x);
              }
          } else {
              echo "Key: $key, value: $obj";
          }
      }
      

      【讨论】:

        【解决方案3】:

        使用递归函数。如果传入的值是对象而不是您要查找的值,则调用它的函数。小心不要陷入无限循环!

        这是一篇好文章。

        http://devzone.zend.com/article/1235

        【讨论】:

          【解决方案4】:

          查看此页面:http://www.php.net/manual/en/language.oop5.iterations.php

          您可以使用foreach 循环访问对象的公共成员,因此您可以使用递归函数来实现。

          如果你想更花哨一点,你可以使用迭代器。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-10-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2022-01-14
            相关资源
            最近更新 更多