猿问

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

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

以下两个函数调用是如何比较的:

isset($a['key'])array_key_exists('key', $a)


阿晨1998
浏览 377回答 3
3回答

回首忆惘然

array_key_exists肯定会告诉您,数组中是否存在密钥,而isset只会回来true如果存在密钥/变量而不是null.$a = array('key1' => 'フーバー', 'key2' => null);isset($a['key1']);             // truearray_key_exists('key1', $a);  // trueisset($a['key2']);             // falsearray_key_exists('key2', $a);  // true还有一个重要的区别。isset不会抱怨$a不存在,而array_key_exists的确如此。

宝慕林4294392

介于array_key_exists和isset虽然两者都非常快[O(1)], isset速度要快得多。如果此检查发生了数千次,您可能希望使用isset.应该注意的是,当数组键存在但值为null, isset会回来false和array_key_exists会回来true..如果价值可能是null,你需要用array_key_exists.

繁花不似锦

对一个老问题的回答由于这里似乎没有回答‘警告’问题(解释如下)基本上,在这种情况下,检查数组中是否存在一个键,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)) ...就能完成任务了。
随时随地看视频慕课网APP
我要回答