多维PHP数组 - 密钥存在

时间:2013-11-14 19:04:00

标签: php arrays multidimensional-array key exists

我想要一个函数,根据PHP中多维数组中是否存在给定键,返回TRUE或FALSE。

我无法弄清楚执行此操作的递归函数。

这可以做的样本:

$array = array(
    'key 1' => array(
        'key 1.1' => array()
        'key 1.2' => array()
    ),
    'key 2' => array(
        'key 2.1' => array(
            'key 2.1.1' => array()
        )
        'key 2.2' => array()
    )
);

multi_array_key_exists('key 1', $array); // return TRUE

multi_array_key_exists('key 2.1.1', $array); // return TRUE

multi_array_key_exists('key 3', $array); // return FALSE

2 个答案:

答案 0 :(得分:2)

这是递归函数派上用场的地方。

function multi_array_key_exists($key, $array) {
    if (array_key_exists($key, $array))
        return true;
    else {
        foreach ($array as $nested) {
            if (is_array($nested) && multi_array_key_exists($key, $nested))
                return true;
        }
    }
    return false;
}

请注意,这可能需要一些时间(在长嵌套数组中),最好先平整,因为您只关心密钥是否存在。

答案 1 :(得分:1)

也许为时已晚,但我想出了一个解决方案:

function multi_array_key_exists(array $path, array $array): bool
{
    if (empty($path)) {
        return false;
    }
    foreach ($path as $key) {
        if (isset($array[$key]) || array_key_exists($key, $array)) {
            $array = $array[$key];
            continue;
        }

        return false;
    }

    return true;
}

$testMe = ['my' => ['path' => ['exists' => true]]];
multi_array_key_exists(['my', 'path', 'exists'], $testMe);

我不需要昂贵的递归调用,而且速度稍快(在我的设置中约为 15%)。