str_repeat() 是 PHP 中重复字符串的内置函数,比手动循环更高效安全,但需注意参数类型、内存消耗、多字节字符兼容性等问题。
用
最直接,别自己写循环
PHP 有现成函数干这事,
就是专为字符串重复设计的。自己用
或
拼接不仅慢,还容易漏转义、搞错边界。
常见错误是传错第二个参数——它必须是整数,传小数或负数会静默截断或返回空字符串:
→
→
(空字符串,不是
)
→
(不报错,但结果为空)
→
(自动向下取整)
重复次数超大时注意内存和性能
是一次性分配内存并填充的,如果重复上万次、原字符串又较长,可能瞬间吃光内存,尤其在低配环境或 CLI 脚本里。
使用场景判断很关键:
立即学习
“
PHP免费学习笔记(深入)
”;
生成分隔线、占位符、测试数据:放心用,几千次以内没问题
拼接日志前缀、动态 SQL 模板:检查重复数是否来自用户输入,必须做范围校验
想重复 10 万次以上:先评估是否真需要完整字符串,考虑流式处理或改用
+ 截断
示例:防止爆炸式内存占用
替代方案:
适合补固定长度
如果你其实是要把字符串“撑到某个长度”,比如日志对齐、ID 补零,
反而绕路。
更精准、更可控。
PHP 8.5.5
PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。
下载
参数差异明显:
:不管原长,硬拼 5 次
:把
补成总长 10,左边填
兼容性没问题,PHP 4 起就支持,比
还老。
多字节字符串?
不认 UTF-8
它按字节操作,遇到中文、emoji 等多字节字符会切开乱码。比如
理论上安全,但若字符串含混合编码或 BOM,或你用
切过编码,结果不可靠。
真正要安全重复 Unicode 字符串,得自己封装:
这个写法不碰字节,纯数组拼接,UTF-8 安全。但代价是稍慢一点,日常几百次内感知不到。
复杂点在于:没有银弹。要不要换方案,取决于你的字符串来源、长度、重复量和运行环境。别默认“能跑就行”,尤其当字符串来自 API 或数据库时,一个 emoji 就可能让
输出乱码。
str_repeat()str_repeat()forwhilestr_repeat("a", 3)"aaa"str_repeat("x", 0)"""x"str_repeat("y", -2)""str_repeat("z", 2.9)"zz"str_repeat()str_pad()if ($count > 10000) {
throw new InvalidArgumentException('重复次数不能超过 10000');
}
$result = str_repeat($pattern, $count);str_pad()str_repeat()str_pad()str_repeat($s, 5)str_pad($s, 10, "0", STR_PAD_LEFT)$s"0"str_repeat()str_repeat()str_repeat("你好", 2)mb_internal_encoding()$safe_repeat = function(string $s, int $times): string {
return implode('', array_fill(0, $times, $s));
};str_repeat()