我已经找到了许多将多维数组转换为一维数组的示例。我需要将数组中的数据放在一起,只需将它们从嵌套中取出并放入第一个主数组中。
下面是数组:
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_merge,array_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]);
},
[]);
}发布于 2017-07-01 20:15:24
使用array_walk_recursive函数的解决方案(收集相应的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;
}
});https://stackoverflow.com/questions/44864929
复制相似问题