2016-09-02 3 views
1

저는 초보자 PHP 프로그래머입니다. 나는 오늘 문제를 만났다. 여기있는 것.중첩 된 엔티티가 많이있는 배열을 읽는 방법

는 나는이 structrue 같은 몇 가지 결과를 얻으려면이

$array = array("id" => 1, 
       "region"=>"world", 
       "parentid" => 0, 
       "children" => array("id" => 39, 
            "region"=>"asia", 
            "parentid" => 1, 
            "children" => array("id" => 70, 
                 "region"=>"china", 
                 "parentid" => 39 
                 ) 
           ) 
      ); 

같은 배열을 가지고있다.

world 
    |- asia 
    |----- china 

여기 내 코드입니다. 작동하더라도 매우 안좋아 보입니다. 그러나 레벨이 3 이상이되면 제대로 작동하지 않을 것입니다.

$array = array(); 
$count = 0; 
for ($i = 0; $i < count($dep); $i++) { 
$array[]["region"] = $dep[$i]["region"]; 
if (isset($dep[$i]["children"])) { 
    for ($ii = 0; $ii < count($dep[$i]["children"]); $ii++) { 
     $array[]["region"] = $dep[$i]["children"][$ii]["region"]; 
     if (isset($dep[$i]["children"][$ii]["children"])) { 
      for ($iii = 0; $iii < count($dep[$i]["children"][$ii]["children"]); $iii++) { 
       $array[]["region"] = $dep[$i]["children"][$ii]["children"][$iii]["region"]; 
      } 
     } 
    } 
} 
} 

return $array; 

문제를 해결하려면 더 나은 해결책이 있어야합니다. 어떤 도움을 주시면 감사하겠습니다.

+2

아마도 재귀 함수를 작성하고 싶을 것입니다. – Rizier123

+0

당신은 재귀 함수를 작성해야합니다. – Manish

+0

재귀 함수를 작성하는 방법을 알려주는 몇 가지 링크를 살펴보십시오. [https://www.copterlabs.com/build-menu-with-recursive-functions/] [http://lornajane.net/posts/2012/php-recursive-function-example-factorial-numbers] – Manish

답변

0

재귀를 활용해야합니다. 즉, 자신을 호출하는 함수를 의미합니다. 여기에 함수를 붙이자.

$array = [ 
    [ 
    "region" => "world", 
    "children" => [ 
     [ 
     "region"=> "asia", 
     "children" => [ 
      [ "region"=> "china" ], 
     ] 
     ], 
     [ 
     "region"=> "europe", 
     "children" => [ 
      [ "region"=>"czech republic" ], 
     ] 
     ] 
    ] 
    ] 
]; 


function format($dataset, $prefix = '') 
{ 
    foreach ($dataset as $data) { 
    echo $prefix . ' ' . $data['region'] . '<br>'; 

    if (! isset($data['children'])) { 
     return; 
    } 

    format($data['children'], $prefix . '--'); 
    } 
} 

format($array); 

배열의 구조를 약간 변경해야하지만 함수는 훨씬 간단합니다. 또한 idparent 키가 중복됩니다.

+0

고맙습니다. 코드를 사용해 봤지만 제대로 작동하지 않습니다. 다음과 같이 표시됩니다. 세계 - 다른 지역이 사라졌습니다. – Bluestone

관련 문제