2016-11-11 51 views
0

我有一個關聯數組對象:PHP Assotiative陣列 - >遞歸遍歷不工作

[ { 
     "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 

    } 

OUTPUT:

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」 的價值。 請指導。

+0

在嘗試與作爲是否$值 - > children_recursive ==「children_recursive」 –

+0

不工作..提示錯誤:ErrorException:試圖讓非對象 – zeetit

+0

財產嘗試使用Log :: info()中的if as $ value ['children_recursive'] –

回答

1

我想出了這個問題。

下面的代碼工作:

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