请教一个问题, 例如下面的代码,在判断数组是否为空的时候,有什么区别呢?
$arr = array('a'=>'');
if(array_filter($arr)) echo 'succ';
else echo 'failed';
if(empty($arr)) echo 'succ';
else echo 'failed';
这段代码会打印两个failed.
首先我们要讨论数组转化为布尔值(true/false)的问题。
手册中说:不包括任何元素的数组为false, 其余均为true.
http://www.php.net/manual/zh/language.types.boolean.php#language.types.boolean.casting
然后我们来看这两个函数的行为。
array_filter会对参数进行过滤,返回一个新的数组,默认情况下会剔除所有值为false的元素。
空字符串会被转换为false, 于是$arr中唯一的一个元素被删除了,返回了一个空数组,空数组被转换为false, 于是打印了第一个failed.
(手册中说)empty的行为大多数情况下,等价于将参数转换为布尔值并取反,即empty($x)等价于!$x.
$arr并非空数组,所以被转换为true, 取反后为false, 所以打印了第二个failed.
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。