徐善通的随笔

千里之行, 始于足下



自己动手, 封装一个php substr函数


代码实现

手动封装一个substr函数, 有以下要求:

  • 开始范围可以传递负数, 负数参数表示从倒数第几位开始截取
  • 长度范围也可以传递负数, 负数表示截取至倒数第几位
  • 长度越界时, 截取到最后一位
  • 没有传递长度时, 截取到最后一位
  • 匹配不到结果时, 返回空

带着以上需求, 开始写代码吧

function mysubstr($string, $start = 0, $length = null) {
    // 定义返回值
    $result = '';
    // 获取字符串长度
    $strLength = strlen($string);

    // 当length未传参时, 设为字符串长度
    if ($length === null) {
        $length = $strLength;
    }
    $length = (int) $length;

    // 处理开始位, 当值为负数时, 计算开始位
    $start = $start < 0 ? ($strLength + $start) : ($start);
    // 定义一个结束位
    $end = $length < 0 ? ($strLength + $length) : $start + $length;

    // 处理越界和开始结束是同一个位置的问题
    if ($start > $strLength || ($end - $start) === 0) {
        return $result;
    }

    // 获取区间的字符串
    for (; $start < $end; $start ++) {
        $result .= $string[$start];
    }

    return $result;
}

调用

echo mysubstr('abcde', 0); // abcde
echo mysubstr('abcde', 0, 2); // ab
echo mysubstr('abcde', -1 ); // e
echo mysubstr('abcde', 0, -1); // abcd
echo mysubstr('abcde', -3, -1); // cd
echo mysubstr('abcde', 0, 100); // abcde

小结

其实实现这个函数并不复杂, 主要就是处理负数参数的问题, 只要处理好负数参数, 其实很简单


作者: 徐善通
地址: https://www.xstnet.com/article-114.html
声明: 除非本文有注明出处,否则转载请注明本文地址


我有话说



最新回复


正在加载中....

Copyrights © 2016-2019 醉丶春风 , All rights reserved. 皖ICP备15015582号-1