包含 empty 标签的文章

关于 PHP 中的 isset 和 array_key_exists 的问题

一直以来我都在想既然有 isset 用来判断数组中的指定的键是否存在,为什么还要有 array_key_exists 的存在,因为 isset 不仅更方便而且性能更好,直到今天在程序出现一个诡异的问题,最后查出无论如何 isset 都判断不出一个明显已经存在于数组中的键的问题时才仔细看了一下文档。

原来 isset 对于数组中指定的索引有值的情况下,如果值是 NULL 那么也会返回 FALSE(官方文档),而不是仅仅判断是否有没有这个键,所以理论上来说 isset 仅仅是用来判断键存在且有值(一般情况下 NULL 都代表什么都没有),那么 isset 在很严格的情况下跟 empty 就十分类似而变的不可靠了。

<?php
$arr = array('a'=>'Hello World', 'b'=>null, 'c'=>0);
isset($arr['a']); //TRUE

isset($arr['b']); //FALSE
!empty($arr['b']); //FALSE
array_key_exists('b', $arr); //TRUE

isset($arr['c']); //TRUE
!empty($arr['c']); //FALSE
array_key_exists('c', $arr); //TRUE

所以如果你需要判断指定的键名是否存在于某个数组中,而不管它的值是什么(哪怕是NULL),那么就需使用 array_key_exists,其它多数情况下还是推荐 isset,毕竟性能会更好。

Pader 2015-12-24 0