在php中如何获得深度未知的多维数组的所有键

问题描述 投票:2回答:1

我需要从该数组中获取所有键。我尝试了递归调用,但只获得了第一个元素键。我希望所有的数组键都以级别存储到数组中。表示keys[0] = array(540,198)。下面是我要遍历并获取所有键的数组。我已经工作了1天以上,但没有得到任何帮助,请帮助解决此问题。

(
    [ch] => Array
        (
            [540] => Array
                (
                    [194] => Array
                        (
                            [16] => Array
                                (
                                    [144] => Array
                                        (
                                        )

                                    [145] => Array
                                        (
                                        )

                                    [146] => Array
                                        (
                                        )

                                    [147] => Array
                                        (
                                        )

                                    [148] => Array
                                        (
                                        )

                                    [195] => Array
                                        (
                                        )

                                    [199] => Array
                                        (
                                        )

                                    [149] => Array
                                        (
                                        )

                                    [200] => Array
                                        (
                                        )

                                    [150] => Array
                                        (
                                        )

                                    [444] => Array
                                        (
                                        )

                                    [151] => Array
                                        (
                                        )

                                    [445] => Array
                                        (
                                        )

                                    [446] => Array
                                        (
                                        )

                                    [152] => Array
                                        (
                                        )

                                )

                        )

                )

            [198] => Array
                (
                    [194] => Array
                        (
                            [16] => Array
                                (
                                    [144] => Array
                                        (
                                        )

                                    [145] => Array
                                        (
                                        )

                                    [146] => Array
                                        (
                                        )

                                    [147] => Array
                                        (
                                        )

                                    [148] => Array
                                        (
                                        )

                                    [195] => Array
                                        (
                                        )

                                    [199] => Array
                                        (
                                        )

                                    [149] => Array
                                        (
                                        )

                                    [200] => Array
                                        (
                                        )

                                    [150] => Array
                                        (
                                        )

                                    [444] => Array
                                        (
                                        )

                                    [151] => Array
                                        (
                                        )

                                    [445] => Array
                                        (
                                        )

                                    [446] => Array
                                        (
                                        )

                                    [152] => Array
                                        (
                                        )

                                )

                        )

                )

        )

)
$this->checkProductConfiguraions($configuraion,$count,$levelKeys);
function checkProductConfiguraions($configuraion,$count,$levelKeys) {
    foreach ($configuraions as $configuraion) {
        if (is_array($configuraion)) {
                $parentKeys = array_keys($configuraion);
                if(isset($levelKeys[$count])){
                    $levelKeys[$count] = array_unique(array_merge($levelKeys[$count],$parentKeys));
                } else {
                    $levelKeys[$count] = $parentKeys;
                }

                $count++;
                $levelKeys[$count] = array();
                for($i=0;$i<count($parentKeys);$i++){
                    $levelKeys[$count] = array_unique(array_merge($levelKeys[$count],array_keys($configuraion[$parentKeys[$i]])));
                    if(is_array($configuraion)){
                        $levelKeys = $this->checkProductConfiguraions($configuraion,$count,$levelKeys);
                    }
                }
        }
    }
}
php arrays multidimensional-array associative-array
1个回答
1
投票
function check($configurations, $count = 0, $levelKeys = array())
{
    foreach ($configurations as $k => $configuration) {
        if (!array_key_exists($count, $levelKeys) || 
            !in_array($k, $levelKeys[$count], true)) {
            $levelKeys[$count][] = $k;
        }
        if (!empty($configuration)) {
            $levelKeys = $this->check($configuration, $count + 1, $levelKeys);
        }
    }
    return $levelKeys;
}

DEMO

在第一轮中,我用第一个键填充$levelKeys变量。

在第一个IF中,我使用in_array()in_array()来避免重复的值。

如果我正在分析的数组具有嵌套数组,则我调用传递的array_key_exist()函数:嵌套数组,达到的级别,levelKeys。

© www.soinside.com 2019 - 2024. All rights reserved.