实现字符串中每个单词内部字符反转但保持单词顺序不变,可用explode+strrev+implode(简单直观)、preg_replace_callback(保留空白格式)或双指针手动遍历(理解底层逻辑)三种方法。

要实现字符串中每个单词内部的字符反转,但保持单词在句子中的顺序不变,比如将 "Hello World" 变成 "olleH dlrow",关键在于:先按空格切分单词,再逐个反转,最后拼接。
用 explode + strrev + implode 组合处理
这是最直观、易读的方法。先用 explode(' ', $str) 拆成单词数组,遍历每个单词用 strrev() 反转,再用 implode(' ', $reversedWords) 重新连接。
- 注意保留原始空格数量?这个方法会把多个连续空格压缩成一个,如需严格保留,得改用正则或手动遍历
- 大小写默认保留,
strrev不影响大小写,原样反转 - 标点符号属于单词一部分,例如
"Hi!"→"!iH"
用 preg_replace_callback 处理更灵活场景
如果字符串含多种空白(如制表符、换行)或想保留所有空白格式,可用正则匹配单词并回调反转:
preg_replace_callback('/\S+/', function($m) { return strrev($m[0]); }, $str)-
\S+匹配一个或多个非空白字符,跳过空格、制表符等,不干扰它们的位置 - 适合处理混合格式文本,比如带缩进或换行的段落
手动遍历字符,原地反转单词(适合学习算法逻辑)
不依赖内置函数,用双指针思想:扫描字符串,遇到单词起始就记录位置,遇到空格或结尾就对当前单词区间反转。
- 需把字符串转为数组(
str_split)才方便交换字符 - 适合理解底层逻辑,也便于扩展(如只反转长度 ≥3 的单词)
- 注意边界判断:字符串开头、结尾无空格时,最后一个单词容易遗漏
三种方式各有所长:简单任务用第一种,格式复杂选第二种,练手或面试讲思路用第三种。核心都是“分词→单个反转→合并”,不改变单词顺序是前提。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











