2017-01-10 41 views
0

我有一個嵌套數組,我想遞歸地展平。我的功能適用於某些情況,而其他情況則失敗。我不明白什麼是錯的。如何在PHP中遞歸地平鋪樹數組?

嵌套數組例如:

Array 
(
    [0] => Array 
     (
      [id] => 6 
      [login] => Breanne 
      [level] => Subdealer 
      [type] => admin 
      [supervisor_id] => 7 
      [name] => Dominique Berge 
      [active] => 0 
      [pending] => 0 
      [waiting] => 0 
      [child] => Array 
       (
        [0] => Array 
         (
          [id] => 10 
          [login] => Priscilla 
          [level] => Subdealer 
          [type] => employee 
          [supervisor_id] => 6 
          [name] => Naomie Hudson 
          [active] => 0 
          [pending] => 0 
          [waiting] => 0 
         ) 

       ) 

     ) 

    [1] => Array 
     (
      [id] => 15 
      [login] => Myrtis 
      [level] => Dealer 
      [type] => manager 
      [supervisor_id] => 7 
      [name] => Dr. Neha Harris 
      [active] => 0 
      [pending] => 0 
      [waiting] => 0 
     ) 

    [2] => Array 
     (
      [id] => 18 
      [login] => Leon 
      [level] => Dealer 
      [type] => employee 
      [supervisor_id] => 7 
      [name] => Felipa Pacocha 
      [active] => 0 
      [pending] => 0 
      [waiting] => 0 
     ) 

) 

平例如:

Array 
(
    [0] => Array 
     (
      [id] => 10 
      [login] => Priscilla 
      [level] => Subdealer 
      [type] => employee 
      [supervisor_id] => 6 
      [name] => Naomie Hudson 
      [active] => 0 
      [pending] => 0 
      [waiting] => 0 
     ) 

    [1] => Array 
     (
      [id] => 6 
      [login] => Breanne 
      [level] => Subdealer 
      [type] => admin 
      [supervisor_id] => 7 
      [name] => Dominique Berge 
      [active] => 0 
      [pending] => 0 
      [waiting] => 0 
     ) 

    [2] => Array 
     (
      [id] => 15 
      [login] => Myrtis 
      [level] => Dealer 
      [type] => manager 
      [supervisor_id] => 7 
      [name] => Dr. Neha Harris 
      [active] => 0 
      [pending] => 0 
      [waiting] => 0 
     ) 

    [3] => Array 
     (
      [id] => 18 
      [login] => Leon 
      [level] => Dealer 
      [type] => employee 
      [supervisor_id] => 7 
      [name] => Felipa Pacocha 
      [active] => 0 
      [pending] => 0 
      [waiting] => 0 
     ) 

) 

我的功能:

function flatten($element) 
{ 
    $flatArray = array(); 
    if (count($element) == 1 && !array_key_exists('child', $element) && !is_array($element)) { 
     $flatArray[] = $element; 
    } 
    foreach ($element as $key => $node) { 
     if (array_key_exists('child', $node)) { 
      $flatArray = flatten($node['child']); 
      unset($node['child']); 
      $flatArray[] = $node; 
     } else { 
      $flatArray[] = $node; 
     } 
    } 


    return $flatArray; 
} 

其失敗的情況下是太長,我把它放在一個文件鏈接是https://drive.google.com/file/d/0B5A_yGNzXeg5UG11YWJDXzlMQVk/view?usp=sharing

+0

你有共同的錯誤文檔。 –

+0

對不起。我已糾正它。 –

回答

2

合併內部拼合輸出。

function flatten($element) 
{ 
    $flatArray = array(); 
    foreach ($element as $key => $node) { 
     if (array_key_exists('child', $node)) { 
      $flatArray = array_merge($flatArray,flatten($node['child'])); 
      unset($node['child']); 
      $flatArray[] = $node; 
     } else { 
      $flatArray[] = $node; 
     } 
    } 


    return $flatArray; 
} 
+1

謝謝@ Kris-Roofe。有用。 –

-1
function flatten_array($items, array $flattened = []) { 
    foreach ($items as $key => $value) { 
     if (is_array($value)) { 
      $flattened = flatten_array($value, $flattened); 
      continue; 
     } 

     $flattened[$key] = $value; 
    } 

    return $flattened; 
}