• php原生代码实现explode函数功能


     在开始代码前要先介绍几个PHP函数:

    explode()   把字符串打散成数组

    strpos()     返回字符串在另一个字符串第一次出现的位置(对大小写敏感)

    strstr()       查找字符串在另一个字符串的位置,并返回剩余部分(对大小写敏感)

    substr()     返回字符串的一部分

    好了,废话不多说,直接上代码:

    function explodes($string, $exp = ',')
    {
    if ( !is_string($string) )
    {
    return false;
    }

    $array = array();

    while(true)
    {
    if ( !strstr($string, $exp) && !empty($string) )
    {
    $array[] = $string;
    break;
    }

    $str = strstr($string, $exp);
    $num = strpos($string, $exp);

    if ( $num )
    {
    $array[] = substr($string, 0, $num);
    }

    $str = trim($str, $exp);

    if ( !$str ) break;

    $string = $str;

    }
    return $array;
    }

    经过测试,发现了一个问题,当字符串中出现连续的分割字符的时候,上面的函数和explode输出的结果有差别.

    字符串: $string = "asd,asd,asd,asd,asd,asd,,,,";

    自定义函数explodes的输出结果:

    array(8) {
    [0]=>
    string(4) "asdf"
    [1]=>
    string(2) "sd"
    [2]=>
    string(3) "asd"
    [3]=>
    string(3) "asd"
    [4]=>
    string(3) "asd"
    [5]=>
    string(3) "sda"
    [6]=>
    string(3) "asd"
    [7]=>
    string(3) "asd"
    }

    而调用PHP内置字符串函数explode的结果却是:

    array(13) {
    [0]=>
    string(4) "asdf"
    [1]=>
    string(2) "sd"
    [2]=>
    string(3) "asd"
    [3]=>
    string(3) "asd"
    [4]=>
    string(3) "asd"
    [5]=>
    string(3) "sda"
    [6]=>
    string(3) "asd"
    [7]=>
    string(3) "asd"
    [8]=>
    string(0) ""
    [9]=>
    string(0) ""
    [10]=>
    string(0) ""
    [11]=>
    string(0) ""
    [12]=>
    string(0) ""
    }

    很明显的一个bug,正在着手解决,但没有思路,请教各位大神是没有什么好的办法

     
  • 相关阅读:
    移动端摇一摇与重力感应事件
    百度的js日历
    wow.js
    pc网页中嵌入百度地图
    微信小程序之倒计时插件 wxTimer
    IE常见的兼容处理
    particles.js使用及配置
    微信小程序之swiper组件高度自适应
    js获取元素的滚动高度,和距离顶部的高度
    vue实现移动端触屏拖拽功能
  • 原文地址:https://www.cnblogs.com/skl-bobo/p/10446380.html
Copyright © 2020-2023  润新知