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

PHP实现字符串除末尾字符外转小写、末尾字符大写的技术问询

原代码验证与优化方案

首先,你的代码确实是可行的!我们来拆解一下它的逻辑:

  1. strrev($var) 将输入字符串反转,把"HeLlo WOrld"变成"dlrO olleH"
  2. ucwords(...) 会把每个单词的首字母大写(这里的"首字母"其实是原单词的尾字母),反转后的字符串变成"DlrO OlleH"
  3. 再次strrev(...)反转回来,就得到了预期的"hellO worlD"

不过这个写法有点绕,可读性稍差,而且ucwords默认只识别空格作为单词分隔符,如果你的场景里有其他单词分隔符(比如下划线、连字符),结果可能不符合预期。下面提供一个更直观、更灵活的优化方案:

function caps_caps($var) {
    // 按空格拆分单词,支持多个连续空格的情况
    $words = preg_split('/\s+/', $var, -1, PREG_SPLIT_NO_EMPTY);
    $processedWords = [];
    
    foreach ($words as $word) {
        $wordLength = strlen($word);
        // 处理单字符单词的情况
        if ($wordLength === 1) {
            $processedWords[] = strtoupper($word);
            continue;
        }
        // 截取除最后一个字符外的部分转小写,最后一个字符转大写
        $lowerPrefix = strtolower(substr($word, 0, $wordLength - 1));
        $upperSuffix = strtoupper(substr($word, -1));
        $processedWords[] = $lowerPrefix . $upperSuffix;
    }
    
    $result = implode(' ', $processedWords);
    echo $result;
    return $result;
}

// 测试调用
caps_caps("HeLlo WOrld"); // 输出 hellO worlD
caps_caps("a"); // 输出 A
caps_caps("test-case"); // 如果需要处理连字符单词,可调整拆分规则

这个方案的优势:

  • 逻辑清晰,一眼就能看出是对每个单词单独处理,把前缀转小写、尾字符转大写
  • 使用preg_split处理单词拆分,能兼容多个连续空格的场景,避免生成空单词
  • 单独处理了单字符单词的边界情况,逻辑更严谨

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:20:21