$arr = [
'name' => 'John',
'access' => '1',
'address' => [
'line_1' => '10',
'line_2' => 'example street',
],
]
如何在不丢失键的情况下展平此示例数组(或将其转换为集合),我尝试使用collect和flatten,但这会丢失键。
我期望这样:
$arr = [
'name' => 'John',
'access' => '1',
'line_1' => '10',
'line_2' => 'example street',
]
答案 0 :(得分:5)
您可以通过使用核心迭代器函数来尝试这样做,
$temp = [];
$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr));
foreach($it as $k => $v) {
$temp[$k] = $v;
}
print_r($temp);
RecursiveIteratorIterator-可用于通过递归迭代器进行迭代。
RecursiveArrayIterator-此迭代器允许以与ArrayIterator相同的方式遍历数组和对象的同时取消设置和修改值和键。另外,可以迭代当前的迭代器条目。
输出
Array
(
[name] => John
[access] => 1
[line_1] => 10
[line_2] => example street
)
Demo。
答案 1 :(得分:0)
我认为@Rahul Meshram的解决方案更好,但是您也可以尝试使用此解决方案。
<?php
$arr = [
'name' => 'John',
'access' => '1',
'address' => [
'line_1' => '10',
'line_2' => 'example street',
],
];
$newArray = [];
foreach ($arr as $k1 => $v1){
if(is_array($v1) && count($v1) > 0){
foreach ($v1 as $k2 => $v2){
$newArray[$k2] = $v2 ;
}
}else {
$newArray[$k1] = $v1 ;
}
}
print_r($newArray);