【问题标题】:Multidimensional PHP array - Key exists多维 PHP 数组 - 键存在
【发布时间】:2013-11-27 23:10:03
【问题描述】:

我想要一个函数,它会根据给定键是否存在于 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

【问题讨论】:

  • 你在哪里尝试写multi_array_key_exists

标签: php arrays multidimensional-array key exists


【解决方案1】:

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

function multi_array_key_exists($key, array $array): bool
{
    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;
}

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

【讨论】:

    【解决方案2】:

    也许为时已晚,但这是我想出的解决方案:

    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%)。

    【讨论】:

    • 找到有用的解决方案永远不会太晚! ?
    猜你喜欢
    • 2011-09-20
    • 2023-03-16
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 2013-09-21
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多