PHP 将数组渲染为平面数组,父键在前面


PHP render array to flat array with parent key in front

>我有一个想要展平的数组,但我想添加一个反斜杠和所有父键。我在下面举个例子,有人可以帮助我吗?该数组可以包含更多 5 个级别

Cars
    Mercedes
    BMW
    Chevrolet
        Caprice
        Other
Motors
    Yamaha
    Suzuki

Cars
Cars'Mercedes
Cars'BMW
Cars'Chevrolet
Cars'Chevrolet'Caprice
Cars'Chevrolet'Other
Motors
Motors'Yamaha
Motor'Suzuki

我已经快速演示了您的要求,但不确定您的数组与我这里的测试数组有多相似。如果您需要更多帮助,请告诉我,这是一个有趣的问题。

<?php
$arr = array(
    'val1' => 1,
    'val2' => 2,
    'val3' => array(
        'val3.1' => 1,
        'val3.2' => array(
            'val3.2.1' => 1
            ),
        'val3.3' => 3
        ),
    'val4' => 4
);
function arrayToPath($array, $path = ''){
    $paths_out = array(); 
    foreach($array as $key => $value){
        $path .= '''' . $key;
        $paths_out[] = $path;
        if(true === is_array($value)){
            $paths_out = array_merge($paths_out, arrayToPath($value, $path));
        }
    }
    return $paths_out;
}
$path_outputs = arrayToPath($arr);
var_dump($path_outputs);
?>

将输出:

array(8) { 
    [0]=> string(5) "'val1" 
    [1]=> string(10) "'val1'val2" 
    [2]=> string(15) "'val1'val2'val3" 
    [3]=> string(22) "'val1'val2'val3'val3.1" 
    [4]=> string(29) "'val1'val2'val3'val3.1'val3.2" 
    [5]=> string(38) "'val1'val2'val3'val3.1'val3.2'val3.2.1" 
    [6]=> string(36) "'val1'val2'val3'val3.1'val3.2'val3.3" 
    [7]=> string(20) "'val1'val2'val3'val4" 
} 

尝试一下这种简单的递归方法:

<?php
$catalog = [
    'Cars' => [
        'Mercedes' => [],
        'BMW' => [],
        'Chevrolet' => [
            'Caprice',
            'Other'
        ],
    ],
    'Motors' => [
        'Yamaha',
        'Suzuki'
    ]
];
function flattenCatalog($input, $location='') {
    $output = [];
    foreach ($input as $key=>$val) {
        if (is_array($val)) {
            $output[] = $location.''''.$key;
            foreach (flattenCatalog($val, $location.''''.$key) as $subval) {
                $output[] = $subval;
            }
        }
        else {
            $output[] = $location.''''.$val;
        }
    }
    return $output;
}
print_r(flattenCatalog($catalog));

输出显然是:

Array
(
    [0] => 'Cars
    [1] => 'Cars'Mercedes
    [2] => 'Cars'BMW
    [3] => 'Cars'Chevrolet
    [4] => 'Cars'Chevrolet'Caprice
    [5] => 'Cars'Chevrolet'Other
    [6] => 'Motors
    [7] => 'Motors'Yamaha
    [8] => 'Motors'Suzuki
)