开发者社区> 问答> 正文

php中empty和array_filter在判断数组是否为空,有什么区别?

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

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

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

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

展开
收起
落地花开啦 2016-06-14 14:35:32 2429 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.

    2019-07-17 19:37:39
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
阿里云栖开发者沙龙PHP技术专场-直面PHP微服务架构挑战-高驰涛 立即下载
PHP安全开发:从白帽角度做安全 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载