• 你好!欢迎你的到来
  • 关于我们
  • 首页 博客 学习笔记 技术导航 工具
  • 博文分类
    • PHP(43)
    • MySQL(11)
    • Linux(28)
    • html(3)
    • JQuery(4)
    • JavaScript(9)
    • svn(2)
    • CSS(2)
    • seajs(1)
    • go(44)
    • redis(1)
    • nginx(8)
    • mongo(0)
    • es(0)
    • 算法(0)
    • 其他(26)
    • 生活(1)
    专栏
    • Jquery基础教程
      • 文章:(15)篇
      • 阅读:16958
    • shell命令
      • 文章:(42)篇
      • 阅读:57940
    • Git教程
      • 文章:(36)篇
      • 阅读:114364
    • leetCode刷题
      • 文章:(37)篇
      • 阅读:14348
    • 摘要视图
    • 目录视图
    使用PHP的explode函数踩过的坑
    标签: 函数explode
    2017-12-12 22:45 阅读(4183) 评论(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);

    于是成功的跳过了坑。


    本文为原创文章,请尊重辛勤劳动,如需转载,请保留本文地址
    http://www.findme.wang/blog/detail/id/294.html

    若您感觉本站文章不错,读后有收获,不妨赞助一下?

    我要赞助

    您还可以分享给朋友哦

    更多
    顶
    2
    踩
    0
    • 上一篇: Mysql时间戳与时间格式转换问题汇总
    • 下一篇: IntelliJ IDEA 2017中使用PHP的相关的配置
    • 查看评论
    • 正在加载中...
    • 留言
    • 亲,您还没有登录,登录后留言不需要审核哦!
      可以使用如下方式登录哦!
  • CSDN | 新浪微博 | github | 关于我们 | 我要留言 | 友链申请
  • 豫ICP备18038193号    Copyright ©lidequan All Rights Reserved