2016-12-05 23 views
-1

我有一個數組,拼合遞歸陣列「 untree」'荷蘭國際集團

$arr = Array(
    Array(
     'title' => 'Title 1', 
     'id' => 1, 
     'parent' => 0, 
     'children' => [ 
      Array(
       'title' => 'Title 1.1', 
       'id' => 4, 
       'parent' => 1, 
       'children' => [ 
        Array(
        'title' => 'Title 1.1.1', 
        'id' => 19, 
        'parent' => 4 
        ),  
        Array(
        'title' => 'Title 1.1.2', 
        'id' => 123, 
        'parent' => 4 
        ) 
       ] 
      ), 
      Array(
       'title' => 'Title 1.2', 
       'id' => 4, 
       'parent' => 1, 
       'children' => [ 
        Array(
        'title' => 'Title 1.2.1', 
        'id' => 19, 
        'parent' => 4 
        ) 
       ] 
      ) 
     ] 
    ), 
    Array(
     'title' => 'Title 2', 
     'id' => 1, 
     'parent' => 0 
    ) 
); 

,我想通過‘切割’的孩子節點到單獨的項目,讓我與這些陣列‘扁平化’物品在一個一級陣列中:

$arr = Array(
    Array(
     'title' => 'Title 1', 
     'id' => 1, 
     'parent' => 0 
    ), 
    Array(
     'title' => 'Title 1.1', 
     'id' => 4, 
     'parent' => 1 
    ), 
    Array(
     'title' => 'Title 1.1.1', 
     'id' => 19, 
     'parent' => 4 
    ), 
    Array(
     'title' => 'Title 1.1.2', 
     'id' => 123, 
     'parent' => 4 
    ),   
    Array(
     'title' => 'Title 1.2', 
     'id' => 4, 
     'parent' => 1 
    ), 
    Array(
     'title' => 'Title 1.2.1', 
     'id' => 19, 
     'parent' => 4 
    ), 
    Array(
     'title' => 'Title 2', 
     'id' => 1, 
     'parent' => 0 
    ) 
); 

有人能幫我一下嗎?非常感謝!

+0

功能traverseArray($數組$ target = Array()){ foreach($ array as $ key =>&$ value){ if(isset($ value ['children'])){ return traverseArray($ value); } else { $ target [] = $ array; } } return $ target; } $ out = traverseArray($ arr); print_r($ out); 這個迭代,但留下一個模式,我真的不明白它是如何構建的。 – chrney

回答

1

這將幫助你..

<?php 
function recursiveFind(array $items,&$return=array()) 
{ 
    foreach($items as $item){ 
     if(array_key_exists('children',$item)){ 
      $childs = $item['children']; 
      unset($item['children']); 
      array_push($return,$item); 
      recursiveFind($childs,$return); 

     }else{ 
      array_push($return,$item); 
     } 

    } 
    return $return; 
} 

$arr = Array(
    Array(
     'title' => 'Title 1', 
     'id' => 1, 
     'parent' => 0, 
     'children' => [ 
      Array(
       'title' => 'Title 1.1', 
       'id' => 4, 
       'parent' => 1, 
       'children' => [ 
        Array(
        'title' => 'Title 1.1.1', 
        'id' => 19, 
        'parent' => 4 
        ),  
        Array(
        'title' => 'Title 1.1.2', 
        'id' => 123, 
        'parent' => 4 
        ) 
       ] 
      ), 
      Array(
       'title' => 'Title 1.2', 
       'id' => 4, 
       'parent' => 1, 
       'children' => [ 
        Array(
        'title' => 'Title 1.2.1', 
        'id' => 19, 
        'parent' => 4 
        ) 
       ] 
      ) 
     ] 
    ), 
    Array(
     'title' => 'Title 2', 
     'id' => 1, 
     'parent' => 0 
    ) 
); 
echo '<pre>'; 
print_r(recursiveFind($arr)); 
+0

對不起,你介意有人誤解了。我需要一個一級數組。我編輯了我的問題和預期的輸出。 – chrney

+0

@chrney,我已更新答案檢查一次.. –

+0

謝謝。我們正在接近,但還沒有 - 如果陣列開始「最好」,我不幸沒有什麼用處。我需要按照與上面提供的順序相同的順序。不管怎麼說,還是要謝謝你! – chrney

-1

3的foreach試試這個:

的foreach($改編爲$ a){

echo $a['title']; 
foreach($a['children'] as $b) 
{ 
    echo $b['title']; 
    foreach($b['children'] as $c) 
    { 
     echo $c['title']; 
    } 
} 

} 
+1

不是一個好主意。我有a)不知道這可能會有多深。 b)不要重複任何代碼,特別是不管在什麼級別都要做同樣的事情。 – chrney

相關問題