Heim > Backend-Entwicklung > PHP-Tutorial > php中empty和array_filter在判断数组是否为空的时候有什么区别

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

WBOY
Freigeben: 2016-06-06 20:49:59
Original
1019 Leute haben es durchsucht

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

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

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

if(empty($arr)) echo 'succ';
else echo 'failed';
</code>
Nach dem Login kopieren
Nach dem Login kopieren

回复内容:

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

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

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

if(empty($arr)) echo 'succ';
else echo 'failed';
</code>
Nach dem Login kopieren
Nach dem Login kopieren

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

Verwandte Etiketten:
php
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage