substr_replace的start参数从0开始计数:正数从头往右(0为首个字符),负数从尾往左(-1为末字符);超出范围时自动归位,不报错。

substr_replace 的偏移量(start 参数)是从 0 开始计数的整数,表示在字符串中“第几个字符的位置”开始操作,规则清晰、不绕弯:
偏移量 start 的计算方式
-
正数(如
0,1,5):从字符串开头往右数,位置从 0 起算-
"hello"中:-
start = 0→ 对应'h' -
start = 2→ 对应'l'(h-e-l-l-o) -
start = 5→ 指向字符串末尾(即插入点,在'o'后)
-
-
-
负数(如
-1,-3):从字符串末尾往左数,-1表示最后一个字符的位置-
"hello"长度为 5,索引为0 1 2 3 4,对应字符h e l l o-
start = -1→ 等价于位置4→'o' -
start = -2→ 等价于位置3→'l'(倒数第二个) -
start = -5→ 等价于位置0→'h' -
start = -6→ 超出范围,函数会自动截断为0(PHP 会静默处理,不报错)
-
-
-
start超出范围时的行为:立即学习“PHP免费学习笔记(深入)”;
- 若
start >= 字符串长度,替换从末尾开始(等效于start = strlen($str)),此时常用于追加 - 若
start < -strlen($str),则重置为0
- 若
实际例子帮你确认理解
$str = "ABCDEF"; // 从第 2 个字符(索引 2,即 'C')开始,替换 2 个字符 → "ABXYEF" echo substr_replace($str, "XY", 2, 2); // ABXYEF // 从倒数第 3 个字符(索引 3,即 'D')开始,替换到末尾 → "ABCG" echo substr_replace($str, "G", -3); // ABCG // 在倒数第 1 个位置(即末尾)插入(length=0)→ "ABCDEF!" echo substr_replace($str, "!", -0, 0); // ❌ 错误写法:-0 就是 0 echo substr_replace($str, "!", -1, 0); // ✅ 正确:在 'F' 前插入 → "ABCDE!F" echo substr_replace($str, "!", 6, 0); // ✅ 同样效果:在末尾插入 → "ABCDEF!"
⚠️ 注意:
-0在 PHP 中就是0,不是“末尾”,想在末尾插入请用strlen($str)或6(对"ABCDEF")或-1+0(在'F'前插),别依赖-0。
小结关键点
- 偏移量是字符索引,不是“第几个字符”(人类习惯的 1 起算),而是程序员习惯的 0 起算
- 正数:从头往后数,
0是第一个 - 负数:从尾往前数,
-1是最后一个 - 超出范围不会报错,PHP 会按规则自动归位(如负得太多 → 当作
0;正得太大 → 当作末尾)
不复杂但容易忽略。



















