将多维数组内的多维数组展平,但保留键?

时间:2019-03-08 12:23:56

标签: php arrays laravel laravel-5

$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',
 ]

2 个答案:

答案 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的解决方案更好,但是您也可以尝试使用此解决方案。

type

    <?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);