【发布时间】:2015-06-21 15:18:30
【问题描述】:
我需要展平一个多维数组,但不展平最后一层。
例如,考虑下面的数组
$array = [
1 => [
1 => [
'anna',
'alice'
],
2 => [
'bob',
'bartold'
]
],
2 => [
1 => [
'carol'
],
2 => [
'david'
]
]
];
以下代码
$result = [];
$iterator = new \RecursiveIteratorIterator(
new \RecursiveArrayIterator($array)
);
foreach ($iterator as $row) {
$result[] = $row;
}
返回以下数组
array(6) {
[0]=>
string(4) "anna"
[1]=>
string(5) "alice"
[2]=>
string(3) "bob"
[3]=>
string(7) "bartold"
[4]=>
string(5) "carol"
[5]=>
string(5) "david"
}
我想要得到的是以下内容:
[
1 => [
'anna',
'alice'
],
2 => [
'bob',
'bartold'
],
3 => [
'carol'
],
4 => [
'david'
]
];
没有展平数组的最后一层。 有没有简单的方法来获得这个?
可能我想使用迭代器。
如果您愿意,可以尝试使用this。
【问题讨论】:
-
您尝试过使用 array_walk_recursive 吗? php.net/manual/en/function.array-walk-recursive.php
-
@briosheje 是的,我试过了,结果与我发布的代码完全相同
-
得不到你想要的有两个原因:1)节点[1]的嵌套逻辑与节点[2]不同。 2)您以某种方式分配了无法在递归循环中逻辑重新创建的新键(输出中的键 1、2、3、4),因为它是递归的。我个人建议你要么执行一个嵌套的 foreach 循环,要么只实现一个 ad-hoc 函数。
标签: php arrays recursion iterator