【问题标题】:PHP Assotiative array -> recursive traverse not workingPHP关联数组->递归遍历不起作用
【发布时间】:2017-03-25 09:45:10
【问题描述】:

我有一个关联数组对象:

   [ {
      "id": 15,
      "owner_id": 1,
      "container_info": {
        "id": 1,
        "container_id": 15
      },
      "filters": [
        {
          "id": 3,
          "parent_id": null
        },
        {
          "id": 6,
          "parent_id": null
        }
      ],
      "children_recursive": [
        {
          "id": 7,
          "owner_id": 1,
          "container_info": null,
          "filters": [

          ],
          "children_recursive": [
            {
              "id": 8,
              "owner_id": 1,
              "container_info": null,
              "filters": [

              ],
              "children_recursive": [

              ]
            }
          ]
        },
        {
          "id": 16,
          "owner_id": 1,
          "container_info": {
            "id": 2,
            "container_id": 16
          },
          "filters": [

          ],
          "children_recursive": [

          ]
        },

      ]
    }
   ]

我想递归循环遍历所有对象及其 children_recursive 键。并且每个 children_recursive 对象(任意深度)都需要处理

所以我用了:

public function traverseContainerRecursively($containerItems)
    {


            Log:info(' CHECK 1');
              foreach ($containerItems as $containerItem) {

                Log::info(json_encode($containerItem->id));                    
                Log::info(json_encode($containerItem->owner_id));                    
                Log::info(json_encode($containerItem->container_info));
                Log::info(json_encode($containerItem->children_recursive));

              }


              Log::info(' CHECK 2');
              foreach ($containerItems as $containerItem) {

                Log::info(json_encode($containerItem['id']));
                Log::info(json_encode($containerItem['owner_id']));
             Log::info(json_encode($containerItem['container_info']));
         Log::info(json_encode($containerItem['children_recursive']));
              }

            Log::info(' CHECK 3');

            foreach ($containerItems as $key=>$value) {

                    if( $key == "children_recursive" ) {

                            Log::info(json_encode($value));
                            $this->traverseContainerRecursively($value);
                    }

            } //foreach end

    }

输出:

CHECK 1 
15
1
null
null


CHECK 2 
15
1
null
null

CHECK 3

{
  "id": 15,
  "owner_id": 1,
  "container_info": {
    "id": 1,
    "container_id": 15
  },
  "filters": [
    {
      "id": 3,
      "parent_id": null
    },
    {
      "id": 6,
      "parent_id": null
    }
  ],
  "children_recursive": [
    {
      "id": 7,
      "owner_id": 1,
      "container_info": null,
      "filters": [

      ],
      "children_recursive": [
        {
          "id": 8,
          "owner_id": 1,
          "container_info": null,
          "filters": [

          ],
          "children_recursive": [

          ]
        }
      ]
    },
    {
      "id": 16,
      "owner_id": 1,
      "container_info": {
        "id": 2,
        "container_id": 16
      },
      "filters": [

      ],
      "children_recursive": [

      ]
    },

  ]
} // i.e. the entire passed object

所以我无法检索键“children_recursive”的值。 请指导。

【问题讨论】:

  • 尝试在 if as $value->children_recursive == "children_recursive"
  • 不工作.. 它给出错误:ErrorException: Trying to get property of non-object
  • 在 Log::info() 中的 if as $value['children_recursive'] 中尝试

标签: php laravel loops recursion associative-array


【解决方案1】:

我发现了这个问题。

以下代码有效:

$obj = json_decode($containerItem);
Log::info(json_encode($obj->children_recursive));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多