2017-07-01 183 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