
在遍历数组时,若需获取当前元素与下一个元素组成的配对(如相邻字符拼接),必须避免访问超出边界的索引(如最后一个元素的 $i+1),否则将触发“Undefined offset”错误。正确做法是将循环上限设为 count($array) - 1。
在遍历数组时,若需获取当前元素与下一个元素组成的配对(如相邻字符拼接),必须避免访问超出边界的索引(如最后一个元素的 `$i+1`),否则将触发“undefined offset”错误。正确做法是将循环上限设为 `count($array) - 1`。
当你尝试用 $array[$i+1] 获取下一个元素时,问题本质在于数组下标越界:原数组有 4 个元素(索引 0–3),当 $i = 3 时,$i+1 = 4 已超出合法范围(最大有效索引为 3),因此 PHP 抛出 ErrorException: Undefined offset: 4。
根本解决思路是:相邻配对的数量恒为 n−1(n 为数组长度),因此循环不应执行 n 次,而应只执行 n−1 次。推荐使用以下安全写法:
$array = ["B", "C", "D", "A"];
$sequence_arr = [];
for ($i = 0; $i + 1 < count($array); $i++) {
$sequence_arr[] = $array[$i] . $array[$i + 1];
}
// 输出结果:["BC", "CD", "DA"]
print_r($sequence_arr);✅ 优势说明:
-
count($array)只计算一次,$i + 1 逻辑清晰且避免了末次越界; - 无需冗余的
if ($i == 0)分支——首项与其他项处理逻辑完全一致,可统一处理; - 时间复杂度仍为 O(n),无性能损失。
⚠️ 注意事项:
立即学习“PHP免费学习笔记(深入)”;
- 若数组为空或仅含 1 个元素,该循环自动不执行(
count($array) ≤ 1时条件不成立),天然安全; - 避免在循环中反复调用
count($array)作为判断条件(如for ($i=0; $i ),虽正确但每次迭代都重新计算长度,略低效; - 如需更函数式风格,也可用
array_map()配合array_slice(),但对初学者而言,修正后的for循环最直观、易维护。
总结:访问“下一个元素”的关键不是强行兜底,而是从设计上确保索引始终合法——控制循环边界,让逻辑与数据结构的数学特性保持一致。



















