var_dump(count(explode(',',[]))); // 0
var_dump(count(explode(',',''))); // 1
var_dump(count(explode(',',null))); // 1 ????
Run Code Online (Sandbox Code Playgroud)
我期待最后一个0.有人能告诉我爆炸的原因null是1还是0?(PHP 5.6.16)
bis*_*hop 14
explode根据规范将字符串作为其第二个参数.你给它一个null,所以在explode运行逻辑之前,PHP将其null转换为字符串.每个函数都以这种方式运行:如果参数与正式规范不匹配,PHP会尝试"键入juggle"直到它们为止.如果PHP可以玩杂耍,发动机就会快乐地运转,否则你会在手腕上轻轻拍打:
PHP警告:explode()期望参数2是字符串,第1行的file.php中给出的对象
PHP将null变为string的方式很简单:null := ''.因此,与呼叫null和与呼叫''在语义上是等效的,因为类型杂耍的,因为看到这里:
$a = explode(',', '');
$b = explode(',', null);
var_dump($a === $b); // true
$a = count(explode(',', ''));
$b = count(explode(',', null));
var_dump($a === $b); // true
Run Code Online (Sandbox Code Playgroud)
所以现在你可能会问:为什么PHP在空字符串上爆炸时会返回一个单元素数组?这也是通过规范:
如果分隔符包含未包含在字符串中的值...将返回包含字符串的数组.
作为解决方法,使用
array_filter(explode(',', $myvar));
Run Code Online (Sandbox Code Playgroud)
然后你会得到一个空数组并count()返回 0。请注意,当$myvar == ''
| 归档时间: |
|
| 查看次数: |
5790 次 |
| 最近记录: |