zoukankan      html  css  js  c++  java
  • 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,正在着手解决,但没有思路,请教各位大神是没有什么好的办法

     
  • 相关阅读:
    python 安装第三方插件库报错的解决方案
    vue.js helloword
    node.js HelloWord
    十一 —— 迭代器、生成器、装饰器
    十、函数——匿名函数、推导式
    九、函数 —— 参数
    八、数据类型——bytes类型+set类型
    七、数据类型 —— 字典
    六、数据类型 —— 字符串
    五、数据类型 —— 元组
  • 原文地址:https://www.cnblogs.com/skl-bobo/p/10446380.html
Copyright © 2011-2022 走看看