下面两个函数调用比较如何:
isset($a['key'])
array_key_exists('key', $a)
下面两个函数调用比较如何:
isset($a['key'])
array_key_exists('key', $a)
当前回答
在array_key_exists和isset之间,虽然两者都非常快[O(1)],但isset要快得多。如果这个检查发生了成千上万次,你会想要使用isset。
需要注意的是,它们并不相同——当数组键存在但值为空时,isset将返回false, array_key_exists将返回true。如果该值可能为空,需要使用array_key_exists。
正如注释中提到的,如果你的值可能为空,快速的选择是:
isset($foo[$key]) || array_key_exists($key, $foo)
其他回答
函数isset()更快,检查http://www.php.net/manual/en/function.array-key-exists.php#82867
这两者并不完全相同。我不记得确切的区别了,但是在《如何更快更好地确定PHP中是否存在数组键》中很好地概述了它们。
普遍的共识似乎是尽可能使用isset,因为它是一种语言结构,因此更快。但是,差异应该在上面概述。
Array_key_exists会明确告诉你数组中是否存在键,而isset只会在键/变量存在且不为null时返回true。
$a = array('key1' => 'フーバー', 'key2' => null);
isset($a['key1']); // true
array_key_exists('key1', $a); // true
isset($a['key2']); // false
array_key_exists('key2', $a); // true
还有一个重要的区别:当$a不存在时,isset不会报错,而array_key_exists会报错。
处理数组时的主要区别是,当数组值为空时,array_key_exists返回true,而当数组值为空时,isset将返回false。
请参阅PHP文档网站上的isset。
在array_key_exists和isset之间,虽然两者都非常快[O(1)],但isset要快得多。如果这个检查发生了成千上万次,你会想要使用isset。
需要注意的是,它们并不相同——当数组键存在但值为空时,isset将返回false, array_key_exists将返回true。如果该值可能为空,需要使用array_key_exists。
正如注释中提到的,如果你的值可能为空,快速的选择是:
isset($foo[$key]) || array_key_exists($key, $foo)