如何检查数组是否有指定索引的元素?

时间:2010-01-08 18:54:15

标签: php

我知道有array_key_exists()但是在阅读完文档之后我不确定它是否适合这种情况:

我有一个$数组和一个$ index。现在我想访问$数组,但不知道它是否有一个匹配$ index的索引。我不是在谈论一个关联数组,而是一个简单无聊的正常数字索引数组。

有没有一种安全的方法来确定我是否真的会使用给定的$ index(这是一个整数!)来访问$数组元素?

PHP可能不关心我是否访问索引越界的数组,并且可能只返回NULL左右,但我甚至不想尝试编写脏代码,所以我想要来检查数组是否有密钥; - )

3 个答案:

答案 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的用途。它适用于数字和字符串索引。