Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多维PHP数组-存在密钥_Php_Arrays_Multidimensional Array_Key_Exists - Fatal编程技术网

多维PHP数组-存在密钥

多维PHP数组-存在密钥,php,arrays,multidimensional-array,key,exists,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(

我想要一个函数,它将根据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

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

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;
}

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

这就是递归函数的用武之地

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;
}

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

可能太晚了,但我提出了一个解决方案:

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

可能太晚了,但我提出了一个解决方案:

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

您在哪里尝试写入多数组密钥?您在哪里尝试写入多数组密钥?对于一个有用的解决方案来说,永远都不会太晚!对于一个有用的解决方案来说,永远都不会太晚!