为什么在null返回1元素时爆炸?

时间:2016-04-15 13:27:40

标签: php

var_dump(count(explode(',',[]))); // 0
var_dump(count(explode(',',''))); // 1
var_dump(count(explode(',',null))); // 1 ????

我期待最后一个0。有人能告诉我为什么从null爆炸的原因是1而不是0? (PHP 5.6.16)

2 个答案:

答案 0 :(得分:11)

explode将字符串作为其第二个参数by specification。你给它一个null,所以在explode的逻辑运行之前,PHP将null转换成一个字符串。每个函数都以这种方式运行:如果参数与正式规范不匹配,PHP会尝试键入juggle"直到他们这样做。如果PHP可以玩杂耍,发动机会很快地发动,否则你会在手腕上轻拍一下:

  

PHP警告:explode()期望参数2是字符串,第1行的file.php中给出的对象

PHP将null变为字符串的方式很简单:null := ''。因此,null的通话和''的通话在语义上是等效的,因为类型为juggling,如here所示:

$a = explode(',', '');
$b = explode(',', null);
var_dump($a === $b); // true

$a = count(explode(',', ''));
$b = count(explode(',', null));
var_dump($a === $b); // true

所以现在你可能会问:为什么PHP在空字符串上爆炸时返回一个单元素数组?那也是by specification

  

如果分隔符包含未包含在字符串中的值...将返回包含字符串的数组。

答案 1 :(得分:0)

作为解决方法,请使用

array_filter(explode(',', $myvar));

然后您将得到一个空数组,count()将返回0。请注意,当$myvar == ''时,它也会返回一个空数组