php中empty和array_filter在判断数组是否为空的时候有什么区别
PHP中文网
PHP中文网 2017-04-10 14:28:17
[PHP讨论组]

弱弱的请教一个问题, 例如下面的代码,在判断数组是否为空的时候,有什么区别呢?

$arr = array('a'=>'');

if(array_filter($arr)) echo 'succ';
else echo 'failed';

if(empty($arr)) echo 'succ';
else echo 'failed';
PHP中文网
PHP中文网

认证0级讲师

全部回复(1)
天蓬老师

这段代码会打印两个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.

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号