PHP convert nested array to single array while concatenating keys?

前端 未结 7 1003
我在风中等你
我在风中等你 2020-12-10 04:24

Here is an example array:

 $foo = array(
           \'employer\' => array(
                    \'name\' => \'Foobar Inc\',
                    \'phone\         


        
7条回答
  •  予麋鹿
    予麋鹿 (楼主)
    2020-12-10 05:17

    A solution whith only array_* php functions + recursive :

    $array = array(
        "level1"=>"value",
        "level2" => ["level11" => "value", "level21" => "value"],
        "level3" => ["level2" => ["level1" => "value"]],
        "level4" => ["level3" => ["level2" => ["level1" => "value"]]],
        "level5" => ["level4" => ["level3" => ["level2" => ["level1" => "value"]]]],
    );
     
    //flatten array with combined keys
    function arrayFlat($array) {
        $result = [];
        array_walk($array, function($v, $pk)use(&$result){
            if(is_array($v)) {
                $result += arrayFlat(array_combine(
                    array_map(function($k) use($pk){ return $pk . '_' .$k; }, array_keys($v)),
                    $v
                ));
            } else {
                $result[$pk] = $v;
            }
        });
        return $result;
    }
    
    print_r(arrayFlat($array));
    

    Output :

    Array
    (
        [level1] => value
        [level2_level11] => value
        [level2_level21] => value
        [level3_level2_level1] => value
        [level4_level3_level2_level1] => value
        [level5_level4_level3_level2_level1] => value
    )
    

提交回复
热议问题