一、概述
前段时间,在项目中使用了explode,没想到既然踩坑了,只好记录下这个坑。我们先来看一个例子吧,如下:$str1 = "zhangsan,wangwu,zhaoliu";
$arr = explode(',', $str1);
if (empty($arr)) {
echo 'sum is empty';
} else {
echo 'sum :',count($arr);
}
非常简单的一个小例子,答案是
sum:3
那么如果把上面的例子改为这样呢?$str1 = '';
$arr = explode(',', $str1);
if (empty($arr)) {
echo 'sum is empty';
} else {
echo 'sum :',count($arr);
}
答案是什么呢?是“sum is empty”吗?当然不是啦,要不然也不会踩坑,其实答案是:
sum:1
刚刚开始,感觉不可思议,PHP为什么要这么搞呢?只好去php官方文档求救了,细致了读一下,其实就明白了。
explode函数的语法如下:array explode ( string $delimiter , string $string [, int $limit ] )
函数参数与返回值描述如下:delimiter
边界上的分隔字符。
string
输入的字符串。
limit
如果设置了 limit 参数并且是正数,则返回的数组包含最多 limit 个元素,而最后那个元素将包含 string 的剩余部分。
如果 limit 参数是负数,则返回除了最后的 -limit 个元素外的所有元素。
如果 limit 是 0,则会被当做 1。
关于返回值
1.如果 delimiter 为空字符串(""),explode() 将返回 FALSE。
2.如果 delimiter 所包含的值在 string 中找不到
a.使用了负数的limit ,那么会返回空的 array,
b.没有使用负数的limit,那么返回包含 string 单个元素的数组
上面踩的坑,正好是需要应用手册中第二条规则的b选项,看来多看手册是没有错的。
二、案例
了解了上面的规则后,我们便很好的解释常见的问题,案例如下:$str1 = "zhangsan,wangwu,zhaoliu";
$arr = explode('!', $str1, -1);
var_dump($arr);//返回返空数组
$arr2 = explode('!', $str1);
var_dump($arr2);
$arr3 = explode('', $str1);
var_dump($arr3);
$arr4 = explode('', '');
var_dump($arr4);
$arr5 = explode(',', '');
var_dump($arr5);
结果依次为:array(0) { }
array(1) { [0]=> string(23) "zhangsan,wangwu,zhaoliu" }
bool(false)
bool(false)
array(1) { [0]=> string(0) "" }
既然知道这个规则,那么平时在分隔的时候,我们应当先判断是否为空。 如下:$str1 = "zhangsan,wangwu,zhaoliu";
$arr = empty($str1) ? [] : explode(',', $str1);
于是成功的跳过了坑。