【问题标题】:Flatten a multi dimensional array inside a multi dimensional array but retain keys? [duplicate]在多维数组中展平多维数组但保留键? [复制]
【发布时间】:2019-07-30 11:37:16
【问题描述】:
$arr = [
    'name' => 'John',
    'access' => '1',
    'address' => [
        'line_1' => '10',
        'line_2' => 'example street',
    ],
]

如何在不丢失键的情况下展平此示例数组(或将其转换为集合),我尝试使用收集和展平,但这会丢失键。

我期待这个:

$arr = [
    'name' => 'John',
    'access' => '1',
    'line_1' => '10',
    'line_2' => 'example street',
 ]

【问题讨论】:

    标签: php arrays laravel laravel-5 multidimensional-array


    【解决方案1】:

    您可以通过使用核心迭代器函数来尝试这样做,

    $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.

    【讨论】:

    • 我目前没有这个问题,但是很好,我知道为什么我不知道这个但通常我手动执行递归函数,但这很令人满意,谢谢
    【解决方案2】:

    我认为@Rahul Meshram 的解决方案更好,但你也可以试试这个。

    Try

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

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 2013-09-12
      • 2012-03-21
      • 1970-01-01
      • 2012-08-27
      • 1970-01-01
      • 2020-06-06
      • 1970-01-01
      相关资源
      最近更新 更多