如何在PHP中检查数组键是否存在?array_key_exists()的使用

答案:array_key_exists()用于检查数组键是否存在,即使值为null也返回true;isset()则要求键存在且值不为null。两者中,array_key_exists()更适合判断键是否存在,而isset()适用于需同时确认值不为null的场景。

如何在php中检查数组键是否存在?array_key_exists()的使用

在PHP中,要检查数组键是否存在,最直接的方法就是使用

array_key_exists()
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

函数。它能告诉你,指定的键是否在数组中出现过,而不用担心键对应的值是不是

null
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

array_key_exists()的使用

array_key_exists()
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

是PHP提供的一个内置函数,专门用于检查数组中是否存在指定的键。它的语法很简单:

bool array_key_exists ( mixed $key , array $array )
登录后复制
$key
登录后复制

是你要查找的键,

$array
登录后复制

是你要搜索的数组。如果键存在,函数返回

true
登录后复制
登录后复制

,否则返回

false
登录后复制
登录后复制

立即学习PHP免费学习笔记(深入)”;

举个例子:

$myArray = ['name' => 'Alice', 'age' => 30, 'city' => 'New York'];

if (array_key_exists('name', $myArray)) {
    echo "键 'name' 存在于数组中。/n";
} else {
    echo "键 'name' 不存在于数组中。/n";
}

if (array_key_exists('address', $myArray)) {
    echo "键 'address' 存在于数组中。/n";
} else {
    echo "键 'address' 不存在于数组中。/n";
}
登录后复制

这段代码会输出:

键 'name' 存在于数组中。
键 'address' 不存在于数组中。
登录后复制
array_key_exists()
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

isset()
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

区别是什么?

初学者经常会混淆

array_key_exists()
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

isset()
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

这两个函数。虽然它们都可以用来检查数组中的键,但它们的行为却有所不同。

isset()
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

函数不仅检查键是否存在,还检查键对应的值是否为

null
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

。如果键不存在或者对应的值是

null
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

isset()
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

都会返回

false
登录后复制
登录后复制

。而

array_key_exists()
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

只关心键是否存在,即使键对应的值是

null
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

,它仍然会返回

true
登录后复制
登录后复制

看下面的例子:

$myArray = ['name' => 'Alice', 'age' => null];

if (array_key_exists('age', $myArray)) {
    echo "array_key_exists: 键 'age' 存在于数组中。/n";
} else {
    echo "array_key_exists: 键 'age' 不存在于数组中。/n";
}

if (isset($myArray['age'])) {
    echo "isset: 键 'age' 存在且不为 null。/n";
} else {
    echo "isset: 键 'age' 不存在或为 null。/n";
}
登录后复制

这段代码会输出:

array_key_exists: 键 'age' 存在于数组中。
isset: 键 'age' 不存在或为 null。
登录后复制

可以看到,

array_key_exists()
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

认为键 ‘age’ 存在,而

isset()
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

认为键 ‘age’ 不存在,因为它的值是

null
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

何时使用

array_key_exists()
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

,何时使用

isset()
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

选择哪个函数取决于你的具体需求。

  • 如果你只想知道某个键是否在数组中定义过,而不关心它的值是否为

    null
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制

    ,那么应该使用

    array_key_exists()
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制

    。这在处理用户提交的表单数据时非常有用,因为你可能需要区分用户是否提交了某个字段,即使他们没有输入任何值。

  • 如果你需要确保键存在并且对应的值不是

    null
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制

    ,那么应该使用

    isset()
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制

    。这在访问数组元素之前进行安全检查时非常有用,可以避免访问

    null
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制

    值导致的错误。

除了

array_key_exists()
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

isset()
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

,还有其他方法可以检查数组键是否存在吗?

虽然

array_key_exists()
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

isset()
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

是最常用的方法,但还有其他一些方法可以用来检查数组键是否存在,虽然它们可能不如前两者那么直接或高效。

  1. 使用

    in_array()
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制

    函数(不推荐,但有时会遇到)

    in_array()
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制

    函数用于检查数组中是否存在某个值,而不是键。但是,如果你将

    array_keys()
    登录后复制
    登录后复制

    函数与

    in_array()
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制

    结合使用,就可以检查数组中是否存在某个键。

    $myArray = ['name' => 'Alice', 'age' => 30];
    
    if (in_array('name', array_keys($myArray))) {
        echo "键 'name' 存在于数组中。/n";
    } else {
        echo "键 'name' 不存在于数组中。/n";
    }
    登录后复制

    这种方法不推荐使用,因为它效率较低。

    array_keys()
    登录后复制
    登录后复制

    会创建一个包含所有键的新数组,然后

    in_array()
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制

    会在这个新数组中搜索。这比直接使用

    array_key_exists()
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制

    慢得多。

  2. 直接访问数组元素并检查其值(不推荐)

    你可以直接访问数组元素,并检查其值是否为

    null
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制

    $myArray = ['name' => 'Alice', 'age' => null];
    
    if ($myArray['age'] !== null) {
        echo "键 'age' 存在且不为 null。/n";
    } else {
        echo "键 'age' 不存在或为 null。/n";
    }
    登录后复制

    这种方法也不推荐使用,因为它会产生一个警告(Warning: Undefined array key ‘age’),如果键不存在。此外,它也无法区分键不存在和键的值为

    null
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制

    这两种情况。

  3. 使用

    key_exists()
    登录后复制
    登录后复制
    登录后复制
    登录后复制

    函数(已弃用)

    在 PHP 7.0 之前,有一个名为

    key_exists()
    登录后复制
    登录后复制
    登录后复制
    登录后复制

    的函数,它的作用与

    array_key_exists()
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制
    登录后复制

    相同。但是,

    key_exists()
    登录后复制
    登录后复制
    登录后复制
    登录后复制

    函数在 PHP 7.0 中已经被弃用,不应该再使用。

    // 不推荐使用
    if (key_exists('name', $myArray)) {
        echo "键 'name' 存在于数组中。/n";
    }
    登录后复制

总结:最佳实践

在大多数情况下,

array_key_exists()
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

是检查数组键是否存在的最佳选择。它简单、高效,并且能够准确地告诉你键是否存在,而不用担心键对应的值是否为

null
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

如果你需要同时检查键是否存在以及值是否为

null
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

,那么应该使用

isset()
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

避免使用

in_array()
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制

和直接访问数组元素,因为它们效率较低或者会产生警告。不要使用

key_exists()
登录后复制
登录后复制
登录后复制
登录后复制

,因为它已经被弃用。

以上就是如何在PHP中检查数组键是否存在?array_key_exists()的使用的详细内容,更多请关注php中文网其它相关文章!

https://www.php.cn/faq/1481236.html

发表回复

Your email address will not be published. Required fields are marked *