代码实现
手动封装一个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
小结
其实实现这个函数并不复杂, 主要就是处理负数参数的问题, 只要处理好负数参数, 其实很简单