Php 展平嵌套关联数组,同时保留键值组
我有如下结构的深层嵌套关联数组:Php 展平嵌套关联数组,同时保留键值组,php,multidimensional-array,Php,Multidimensional Array,我有如下结构的深层嵌套关联数组: Array ( [id] => 1 [name] => Noodles [nodes] => Array ( [0] => Array ( [id] => 2 [name] => Egg [nodes] => Array ( )
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
(
)
)
)
)
)
)
$tempId = '';
foreach ($it as $key => $value) {
if ($key == 'id'){
if ($value != $tempId) {
$temp = [];
}
}
$temp[$key] = $value;
if ($key == 'name') {
$result[] = $temp;
}
}
我正试着把它变成:
[
[
'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
)
如何最好地展平所有这些多维关联数组?正在重复$key的值,因此每次$key是id,例如,$result['id']的现有值都将被替换 我不确定这是否充分利用了迭代器,但请尝试以下方法:
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
(
)
)
)
)
)
)
$tempId = '';
foreach ($it as $key => $value) {
if ($key == 'id'){
if ($value != $tempId) {
$temp = [];
}
}
$temp[$key] = $value;
if ($key == 'name') {
$result[] = $temp;
}
}
谢谢,由于数据结构的僵化,这并不理想,但现在可以用了。是的,这不是一个通用的解决方案,但它说明了我的意思。祝你好运