我有如下结构的深层嵌套关联数组:
Array
(
[id] => 1
[name] => Noodles
[nodes] => Array
(
[0] => Array
(
[id] => 2
[name] => Egg
[nodes] => Array
(
)
)
[1] => Array
(
[id] => 3
[name] => Flour
[nodes] => Array
(
[0] => Array
(
[id] => 4
[name] => Water
[nodes] => Array
(
)
)
)
)
)
)
我正试图扁平化:
[
[
'id' => 1,
'name' => 'Noodles',
],
[
'id' => 2,
'name' => 'Egg',
],
[
'id' => 3,
'name' => 'Flour',
],
[
'id' => 4,
'name' => 'Water',
]
];
我尝试使用递归迭代,但我无法让它返回同一维度上的所有键值以推入新数组:
// $data is the incoming structure mentioned above
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($data));
foreach ($it as $key=>$value) {
$result[$key] = $value;
}
print_r($result);
以上只打印最后一个/最深的数组:
Array
(
[id] => 4
[name] => Water
)
我怎样才能最好地展平所有这些多维关联数组?
答案 0 :(得分:1)
$key的值是重复的,所以每次$key都是id,例如的现有值>$result['id'] 正在被替换。
我不确定这是否充分利用了迭代器,但请尝试以下操作:
$tempId = '';
foreach ($it as $key => $value) {
if ($key == 'id'){
if ($value != $tempId) {
$temp = [];
}
}
$temp[$key] = $value;
if ($key == 'name') {
$result[] = $temp;
}
}