You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP模拟实现内置ltrim函数的代码存在两个问题如何修正?

PHP自定义ltrim函数修正方案

针对你代码存在的两个问题,核心修正逻辑有两点:

  • 调整遍历终止规则:仅从字符串起始位置逐字符校验,一旦遇到第一个不在待修剪字符集合内的字符,立刻停止遍历,完全不会触碰字符串中后段的内容,符合ltrim仅修剪开头的规则
  • 调整字符移除逻辑:不再将匹配字符替换为空格,而是记录开头连续匹配到的待修剪字符长度,最终通过字符串截取直接返回剩余非匹配内容,保证返回结果长度正确

修正后的可运行代码如下,同时兼容内置ltrim未传第二个参数时默认修剪开头空白的行为:

function leftTrim(string $Sstr, ?string $char = null): string
{
    // 未传入待修剪字符时,默认匹配标准空白字符,对齐内置ltrim默认行为
    if ($char === null) {
        $char = " \t\n\r\0\x0B";
    }
    $strLength = strlen($Sstr);
    $matchOffset = 0;
    
    // 仅从字符串开头开始遍历匹配
    for (; $matchOffset < $strLength; $matchOffset++) {
        $isMatch = false;
        // 校验当前位置字符是否属于待修剪字符
        for ($j = 0; $j < strlen($char); $j++) {
            if ($Sstr[$matchOffset] === $char[$j]) {
                $isMatch = true;
                break;
            }
        }
        // 遇到第一个非待修剪字符,直接终止循环,不再往后遍历
        if (!$isMatch) {
            break;
        }
    }
    
    // 从第一个非待修剪字符位置截取子串返回
    return substr($Sstr, $matchOffset);
}

简单测试验证:

  • 调用leftTrim(" hello world ", " "),返回结果为hello world ,仅删除开头空格,末尾空格保留
  • 调用leftTrim("***test***content", "*"),返回结果为test***content,仅删除开头星号,中间、末尾星号不受影响

内容的提问来源于stack exchange,提问作者MBK901

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 07:01:00