以下两个函数调用如何比较:
isset($a['key'])
array_key_exists('key', $a)
Run Code Online (Sandbox Code Playgroud)
dec*_*eze 501
array_key_exists肯定会告诉你数组中是否存在键,而isset只有true键/变量存在且不null存在时才会返回.
$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
Run Code Online (Sandbox Code Playgroud)
还有另一个重要的区别.isset不$a存在时不抱怨,同时也不抱怨array_key_exists.
Pat*_*her 116
之间array_key_exists和isset,虽然两者都是非常快的[O(1)],isset是显著更快.如果这项检查发生了数千次,那么你想要使用isset.
应该注意的是,它们并不相同 - 当数组键存在但值为null,isset将返回false并array_key_exists返回true.如果值可能是null,则需要使用array_key_exists.
Rin*_*g Ø 13
回答一个老问题,因为这里没有答案似乎解决了"警告"问题(解释如下)
基本上,在这种检查数组中是否存在键的情况下, isset
和 array_key_exists
那么我们如何检查一个键是否存在变量中可能为null的值
没有得到警告,当它的值为null时没有错过现有的密钥(PHP开发人员的想法也是一个有趣的问题,但在SO上肯定不相关).当然,我们不想使用@
isset($var[$key]); // silent but misses null values
array_key_exists($key, $var); // works but warning if $var not defined/array
Run Code Online (Sandbox Code Playgroud)
似乎is_array应该参与等式,但如果$var没有定义,它会发出警告,因此这可能是一个解决方案:
if (isset($var[$key]) ||
isset($var) && is_array($var) && array_key_exists($key, $var)) ...
Run Code Online (Sandbox Code Playgroud)
如果测试主要是非空值,则可能更快.否则对于具有大多数空值的数组
if (isset($var) && is_array($var) && array_key_exists($key, $var)) ...
Run Code Online (Sandbox Code Playgroud)
会做的工作.
PHP函数array_key_exists()确定数组元素是否存在特定键或数字索引.但是,如果要确定密钥是否存在并且与值相关联,则PHP语言构造isset()可以告诉您(并且该值不是null).array_key_exists()无法返回有关键/索引值的信息.
功能isset()更快,请查看http://www.php.net/manual/en/function.array-key-exists.php#82867