如何检查数组中是否存在指定索引处的元素?

15

我知道有一个数组函数array_key_exists(),但在阅读文档后,我不确定它是否适用于这种情况:

我有一个$array和一个$index。现在我想访问$array,但不知道它是否有与$index匹配的索引。我不是说关联数组,而是普通的、枯燥无味的数字索引数组。

有没有一种安全的方法来判断我是否真的可以访问给定整数$index对应的$array元素?

PHP可能并不关心我是否使用索引越界访问数组,也许只会返回NULL或其他值,但我不想编写不规范的代码,所以我想要检查数组是否具有该键。

3个回答

29
您可以使用语言结构isset或函数array_key_exists:无论数字还是字符串键都不影响,因为在PHP中它仍然是关联数组。 isset应该会稍微快一些(因为它不是一个函数),但如果元素存在并且其值为NULL,它将返回false
例如,考虑以下数组:
$a = array(
    123 => 'glop', 
    456 => null, 
);

这三个测试依赖于 isset

var_dump(isset($a[123]));
var_dump(isset($a[456]));
var_dump(isset($a[789]));
你会得到这样的输出:
boolean true
boolean false
boolean false

因为:

  • 在第一种情况下,元素存在且不为 null
  • 在第二种情况下,元素存在但为 null
  • 而在第三种情况下,元素不存在


另一方面,在这段代码中使用 array_key_exists

var_dump(array_key_exists(123, $a));
var_dump(array_key_exists(456, $a));
var_dump(array_key_exists(789, $a));
你会得到以下输出:
boolean true
boolean true
boolean false

原因是:

  • 在前两种情况下,元素存在--即使在第二种情况下它为null
  • 而在第三种情况下,它不存在。

8

你可以轻松使用isset()

if (isset($array[$index])) {
   // array index $index exists
}

正如您所提示的那样,如果尝试访问不存在的索引,PHP不是很友好,因此在处理访问特定数组索引时,检查是否在范围内至关重要。

如果决定使用array_key_exists(),请注意有微妙的差别:

对于对应于NULL值的数组键,isset()不会返回TRUE,而array_key_exists()会返回TRUE。


1

这正是array_key_exists的用途。它适用于数字和字符串索引。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接