2017-07-01 165 views
1

我找到了很多將多維數組轉換爲單維數組的示例。我需要將數據保存在數組中,只需將它們嵌套到第一個主數組中即可。將多維數組嵌套到單個多維數組中

這裏是數組:

Array 
(
    [0] => Array 
     (
      [id] => 2 
      [username] => user2 
      [downline] => Array 
       (
        [0] => Array 
         (
          [id] => 5 
          [username] => user5 
          [downline] => Array 
           (
            [0] => Array 
             (
              [id] => 9 
              [username] => user9 
              [downline] => Array 
               (
                [0] => Array 
                 (
                  [id] => 15 
                  [username] => user15 
                 ) 
                [1] => Array 
                 (
                  [id] => 16 
                  [username] => user16 
                 ) 
               ) 
             ) 
            [1] => Array 
             (
              [id] => 10 
              [username] => user10 
              [downline] => Array 
               (
                [0] => Array 
                 (
                  [id] => 17 
                  [username] => user17 
                 ) 
               ) 
             ) 
           ) 
         ) 
       ) 
     ) 
    [1] => Array 
     (
      [id] => 3 
      [username] => user3 
      [downline] => Array 
       (
        [0] => Array 
         (
          [id] => 6 
          [username] => user6 
          [downline] => Array 
           (
            [0] => Array 
             (
              [id] => 11 
              [username] => user11 
              [downline] => Array 
               (
                [0] => Array 
                 (
                  [id] => 18 
                  [username] => user18 
                 ) 
               ) 
             ) 
           ) 
         ) 
       ) 
     ) 
    [2] => Array 
     (
      [id] => 4 
      [username] => user4 
      [downline] => Array 
       (
        [0] => Array 
         (
          [id] => 7 
          [username] => user7 
          [downline] => Array 
           (
            [0] => Array 
             (
              [id] => 12 
              [username] => user12 
              [downline] => Array 
               (
                [0] => Array 
                 (
                  [id] => 19 
                  [username] => user19 
                 ) 
               ) 
             ) 
           ) 
         ) 
        [1] => Array 
         (
          [id] => 8 
          [username] => user8 
          [downline] => Array 
           (
            [0] => Array 
             (
              [id] => 13 
              [username] => user13 
             ) 
            [1] => Array 
             (
              [id] => 14 
              [username] => user14 
             ) 
           ) 
         ) 
       ) 
     ) 
) 

這是短信的所有團隊成員。我不在乎他們是誰,我只需要所有用戶的完整列表,這樣我就可以在系統中循環併發送消息。

因此,這裏是最後一個數組我想獲得的例子:

[ 
    [id] => 2 
    [username] => user2 
], 
[ 
    [id] => 5 
    [username] => user5 
], 
[ 
    [id] => 9 
    [username] => user9 
], 
[ 
    [id] => 15 
    [username] => user15 
], 
[ 
    [id] => 16 
    [username] => user16 
], 
[ 
    [id] => 10 
    [username] => user10 
], 
[ 
    [id] => 17 
    [username] => user17 
], 
[ 
    [id] => 3 
    [username] => user3] 
], 
// ... and so on 

理想的情況下,數組鍵可能是他們的用戶ID。這將在下拉菜單中進行,他們可以選擇他們團隊的成員,也可以向他們發送所有消息。事情是這樣的:

[ 
    1 => 'user1', 
    2 => 'user2', 
    9 => 'user9', 
] 

我已經試過的array_mergearray_walk_recursive。一切只是壓平這一切變化成一個醜陋的一個維數組..

這樣的事情,沒有工作:

function flatten(array $arr) { 
    return array_reduce($arr, function ($c, $a) { 
     return is_array($a) ? array_merge($c, flatten($a)) : array_merge($c, [$a]); 
    }, 
    []); 
} 

回答

1

使用array_walk_recursive函數的溶液(以收集consequtive ID /用戶名對):

// $arr is your initial array 
$result = []; 
array_walk_recursive($arr, function($v, $k) use (&$result){ 
    if ($k == 'id') $result[] = ['id'=> $v]; 
    if ($k == 'username') { 
     $result[count($result)-1]['username'] = $v; 
    } 
}); 
+0

非常感謝你,你的救星!我有一個孩子(平板電腦,音樂,舞蹈)和我的妻子,現在很難集中現在哈哈..我知道我很近,我無法步行遞歸行爲正確。謝謝! –

+0

@WadeShuler,不客氣。附: (我沒有任何你列舉的東西,祝你年輕的家庭幸福!) – RomanPerekhrest