php字符串反转可用strrev()、双指针、递归或栈实现;strrev()最简但不支持utf-8中文,需配合mb_substr等函数或多字节自定义函数;双指针和递归适合学习算法逻辑,时间复杂度均为o(n)。

PHP 中实现字符串反转有多种方式,最直接的是使用内置函数 strrev(),但若需手动实现(如面试、学习算法逻辑),可借助双指针、递归或栈等思路。关键在于理解字符串的不可变性(PHP 中字符串是值类型)及索引操作特性。
使用内置函数:最简方案
PHP 提供了开箱即用的 strrev(),适用于绝大多数场景,效率高且安全:
echo strrev("hello"); // 输出 "olleh"- 支持多字节字符(如中文)需配合
mb_系列函数,strrev()本身按字节反转,对 UTF-8 中文可能乱码 - 若处理中文,推荐:
mb_substr($str, -$i, 1, 'UTF-8')配合循环,或使用mb_strrev()(需自定义,因 PHP 无原生多字节反转函数)
双指针法:原地模拟(适合理解算法)
将字符串转为数组,首尾交换,再拼接。虽非真正“原地”(PHP 字符串不可变),但逻辑清晰、时间复杂度 O(n):
C编写,实现字符串摘要、文件摘要两个功能。里面主要包含3个文件: Md5.cpp、Md5.h、Main.cpp。其中Md5.cpp是算法的代码,里的代码大多是从 rfc-1321 里copy过来的;Main.cpp是主程序。
- 将字符串用
str_split()转为字符数组 - 设置左指针
$left = 0,右指针$right = count($arr) - 1 - 循环交换
$arr[$left]与$arr[$right],然后$left++、$right--,直到$left >= $right - 最后用
implode('', $arr)合并返回
递归实现:体现函数式思维
适用于小长度字符串,直观展现“反转 = 最后一个字符 + 反转剩余部分”的定义:
立即学习“PHP免费学习笔记(深入)”;
- 边界条件:
if (strlen($s) - 递归体:
return $s[strlen($s)-1] . reverse(substr($s, 0, -1)); - 注意:PHP 默认递归深度有限(一般 100 层左右),长字符串易触发
Fatal error - 对 UTF-8 字符需改用
mb_substr($s, -1, 1, 'UTF-8')和mb_substr($s, 0, -1, 'UTF-8')
兼容 UTF-8 的安全反转(实用推荐)
处理中文、emoji 等多字节字符时,必须避免按字节拆分。可靠做法是先用 mb_strlen() 获取字符数,再逐个提取:
- 初始化空字符串
$reversed = '' - 循环
for ($i = mb_strlen($str, 'UTF-8') - 1; $i >= 0; $i--) - 每次用
mb_substr($str, $i, 1, 'UTF-8')取单个字符并拼接 - 该方法兼容所有 Unicode 字符,性能可接受(O(n) 时间,O(n) 空间)










