var_dump(count(explode(',',[]))); // 0
var_dump(count(explode(',',''))); // 1
var_dump(count(explode(',',null))); // 1 ????
我期待最后一个0。有人能告诉我为什么从null
爆炸的原因是1而不是0? (PHP 5.6.16)
答案 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 == ''
时,它也会返回一个空数组