我知道有array_key_exists()但是在阅读完文档之后我不确定它是否适合这种情况:
我有一个$数组和一个$ index。现在我想访问$数组,但不知道它是否有一个匹配$ index的索引。我不是在谈论一个关联数组,而是一个简单无聊的正常数字索引数组。
有没有一种安全的方法来确定我是否真的会使用给定的$ index(这是一个整数!)来访问$数组元素?
PHP可能不关心我是否访问索引越界的数组,并且可能只返回NULL左右,但我甚至不想尝试编写脏代码,所以我想要来检查数组是否有密钥; - )
答案 0 :(得分:28)
您可以使用语言构造isset
或函数array_key_exists
:数字或字符串键无关紧要:对于PHP,它仍然是一个关联数组。
isset
应该更快(因为它不是函数),但如果元素存在且值false
,则会返回NULL
。
例如,考虑这个数组:
$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
答案 1 :(得分:8)
您可以轻松使用isset()
:
if (isset($array[$index])) {
// array index $index exists
}
正如您所建议的那样,如果您尝试访问不存在的索引,PHP就不是很友好,因此在处理访问特定数组索引时检查您是否在边界内是至关重要的。
如果您决定使用array_key_exists()
,请注意存在细微差别:
对于数组,isset()不返回TRUE 对应于NULL值的键, 而array_key_exists()可以。
答案 2 :(得分:1)
这正是array_key_exists
的用途。它适用于数字和字符串索引。