此问题已在此处有答案:
What's quicker and better to determine if an array key exists in PHP?(11个回答)
3年前关闭。
下面两个函数调用如何比较:
isset($a['key'])
array_key_exists('key', $a)
此问题已在此处有答案:
What's quicker and better to determine if an array key exists in PHP?(11个回答)
3年前关闭。
下面两个函数调用如何比较:
isset($a['key'])
array_key_exists('key', $a)
8条答案
按热度按时间ajsxfq5m1#
array_key_exists
肯定会告诉你一个键是否存在于数组中,而isset
只会返回true
,如果键/变量存在而不是null
。还有一个重要的区别:
isset
不会在$a
不存在时抱怨,而array_key_exists
则会抱怨。y1aodyip2#
在
array_key_exists
和isset
之间,虽然两者都非常快[O(1)]
,但isset
要快得多。如果这种检查发生了数千次,您可能需要使用isset
。需要注意的是,它们并不完全相同--当数组键存在但值为
null
时,isset
将返回false
,array_key_exists
将返回true
。如果值可能是null
,则需要使用array_key_exists
。如注解中所述,如果您的值可能是
null
,则快速选择是:bis0qfac3#
处理数组时的主要区别是,当值为
null
时,array_key_exists
返回true
,而当数组值设置为null
时,isset
将返回false
。请参阅
isset()
的PHP文档。kwvwclae4#
回答一个老问题,因为这里没有回答似乎解决了“警告”问题(解释如下)
基本上,在检查数组中是否存在键的情况下,
isset
*但是返回 false,如果该键的值为 null
和
array_key_exists
*但如果数组参数不是 array,则会发出警告
那么我们如何检查一个键是否存在,它的值在变量中可能是null
而不会收到警告,也不会在现有键的值为 null 时丢失它(PHP开发人员在想什么也是一个有趣的问题,但肯定与SO无关)。当然,我们不想使用
@
似乎
is_array
应该包含在等式中,但如果$var
没有定义,它会给出警告,所以这可能是一个解决方案:如果测试主要针对非空值,则这可能更快。否则,对于大多为空值的数组
会做的工作。
11dmarpk5#
PHP函数
array_key_exists()
确定数组元素是否存在特定的键或数字索引。但是,如果你想确定一个 key 是否存在并且与一个 value 相关联,PHP语言的构造isset()
可以告诉你(并且值不是null
)。array_key_exists()
无法返回有关键/索引值的信息。lhcgjxsq6#
函数
isset()
更快,请查看 www.example.combz4sfanl7#
用
@
运算符补充@deceze的答案(作为代数好奇),并指出使用@
“更好”的情况。..如果你需要(没有日志和)微性能优化,这并不是真的更好:array_key_exists
:如果数组中存在键,则为true;isset
:如果键/变量存在且不是null
[faster than array_key_exists],则为true
;@$array['key']
:如果键/变量存在**,则为true
,而不是(null
或''或0)**;[这么慢?]PS:您可以更改/更正/补充此文本,这是一个Wiki。
kyks70gy8#
这两者并不完全相同。我记不清具体的区别了,但是在What's quicker and better to determine if an array key exists in PHP?中有很好的描述。
普遍的共识似乎是尽可能使用isset,因为它是一种语言构造,因此更快。但是,差异应在上文中概述。