【问题标题】:In php how to get all keys of multidimensional array with unknown depth在php中如何获取深度未知的多维数组的所有键
【发布时间】:2023-03-25 22:59:02
【问题描述】:

我需要从这个数组中获取所有的键。我尝试了递归调用,但只获得了第一个元素键。我希望所有数组键都以级别存储到数组中。表示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);
                    }
                }
        }
    }
}

【问题讨论】:

  • 发布您的代码。
  • @SimoneRossaini 我添加了代码。查看并进行必要的修改。

标签: php arrays multidimensional-array associative-array


【解决方案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()array_key_exist() 来避免重复值。

如果我正在分析的数组有一个嵌套数组,我调用check() 函数传递:嵌套数组,我已经达到的级别,levelKeys。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-10
    • 2015-06-30
    • 2017-07-03
    • 2012-06-29
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多