> 백엔드 개발 > PHP 튜토리얼 > php中empty和array_filter在判断数组是否为空的时候有什么区别

php中empty和array_filter在判断数组是否为空的时候有什么区别

WBOY
풀어 주다: 2016-06-06 20:49:59
원래의
1020명이 탐색했습니다.

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

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

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

if(empty($arr)) echo 'succ';
else echo 'failed';
</code>
로그인 후 복사
로그인 후 복사

回复内容:

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

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

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

if(empty($arr)) echo 'succ';
else echo 'failed';
</code>
로그인 후 복사
로그인 후 복사

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

관련 라벨:
php
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿