为了账号安全,请及时绑定邮箱和手机立即绑定

isset()和Array_key_ITS()之间有什么区别?

isset()和Array_key_ITS()之间有什么区别?

PHP
阿晨1998 2019-07-16 18:03:00
isset()和Array_key_ITS()之间有什么区别?以下两个函数调用是如何比较的:isset($a['key'])array_key_exists('key', $a)
查看完整描述

3 回答

?
回首忆惘然

TA贡献1847条经验 获得超11个赞

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

还有一个重要的区别。isset不会抱怨$a不存在,而array_key_exists的确如此。


查看完整回答
反对 回复 2019-07-16
?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

介于array_key_existsisset虽然两者都非常快[O(1)]isset速度要快得多。如果此检查发生了数千次,您可能希望使用isset.

应该注意的是,当数组键存在但值为nullisset会回来falsearray_key_exists会回来true..如果价值可能是null,你需要用array_key_exists.


查看完整回答
反对 回复 2019-07-16
?
繁花不似锦

TA贡献1851条经验 获得超4个赞

对一个老问题的回答由于这里似乎没有回答‘警告’问题(解释如下)

基本上,在这种情况下,检查数组中是否存在一个键,isset

  • 告诉是否定义了表达式(数组),是否设置了键。
  • 如果没有定义var,则没有警告或错误,也没有数组.
  • 回报

    假的

    如果该键的值为

array_key_exists

  • 告诉数组中是否存在如名称所暗示的键。
  • 如果数组参数不是

    列阵

那么,我们如何检查一个键是否存在,哪个值在变量中可能为NULL。

  • 它可能是一个数组,也可能不是一个数组。
  • (或者类似地是多维数组,其中键检查发生在DIM 2,dIM 1值可能不是1的数组)。

    DIM(等.)

如果没有收到警告,则在其值为(PHPdevs的想法也是一个有趣的问题,但肯定与此无关)。当然我们不想用@

isset($var[$key]);            
// silent but misses null valuesarray_key_exists($key, $var); 
// works but warning if $var not defined/array

似乎is_array应该包含在这个等式中,但是它给出了一个警告,如果$var未定义,因此这可能是一种解决方案:

if (isset($var[$key]) || 
    isset($var) && is_array($var) && array_key_exists($key, $var)) ...

如果测试主要是在非空值上,这可能会更快。否则,用于具有大多数空值的数组。

if (isset($var) && is_array($var) && array_key_exists($key, $var)) ...

就能完成任务了。


查看完整回答
反对 回复 2019-07-16
  • 3 回答
  • 0 关注
  • 355 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信