-
博文分类专栏
- Jquery基础教程
-
- 文章:(15)篇
- 阅读:46569
- shell命令
-
- 文章:(42)篇
- 阅读:154251
- Git教程
-
- 文章:(36)篇
- 阅读:234886
- leetCode刷题
-
- 文章:(76)篇
- 阅读:131877
-
使用PHP的explode函数踩过的坑2017-12-12 22:45 阅读(9448) 评论(0)
一、概述
前段时间,在项目中使用了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);
于是成功的跳过了坑。