foreach遍历PHP索引数组最常用写法是foreach($arr as $value),自动按顺序取值,跳过键;需键值时用foreach($arr as $key=>$value),$key为原始数字下标;避免循环中修改数组长度。

foreach 遍历 PHP 索引数组的基本写法
直接用 foreach ($arr as $value) 就能拿到每个元素,不需要手动维护下标。PHP 会按顺序把数组值依次赋给 $value,这是最常用、最安全的方式。
示例:
立即学习“PHP免费学习笔记(深入)”;
$fruits = ['apple', 'banana', 'cherry'];
foreach ($fruits as $fruit) {
echo $fruit . "\n";
}
// 输出:apple → banana → cherry
- 索引数组的键(0, 1, 2…)会被自动跳过,只取值
- 如果原数组有空洞(比如 unset 过某个键),
foreach仍按剩余元素顺序遍历,不关心键是否连续 - 不要在循环里修改数组长度(如
unset()或array_push()),否则行为可能不可预期
需要同时访问键和值时怎么写
用 foreach ($arr as $key => $value)。对索引数组来说,$key 就是数字下标(0, 1, 2…),不是字符串。
示例:
立即学习“PHP免费学习笔记(深入)”;
$numbers = [10, 20, 30];
foreach ($numbers as $index => $num) {
echo "位置 {$index}: {$num}\n";
}
// 输出:位置 0: 10 → 位置 1: 20 → 位置 2: 30
-
$key是原始键名,哪怕你用array_values()重排过,它也还是数字 - 如果数组是通过
array_merge([1], [2])合并的,键可能从 0 开始连续,但若合并关联数组,键可能变成字符串,这时就不是“索引数组”了 - 别假设
$key一定等于$index + 1或其他偏移——它就是当前元素的真实键
为什么不用 for 循环配合 count()?
因为容易出错。常见坑包括:count() 被误调用、边界条件写成 导致越界、数组在循环中被修改导致 <code>count() 结果变化。
-
foreach是 PHP 内部迭代器,不依赖数组长度计算,天然规避越界 - 索引数组如果键不连续(如
[0 => 'a', 2 => 'b']),for ($i = 0; $i 会跳过 <code>$arr[1](不存在)并报 Notice 访问未定义索引 -
foreach性能略优于for,尤其大数组——它不重复调用count(),也不做整数加法判断
遍历时修改数组值要注意什么
想改原数组的值,得用引用:在 $value 前加 &,即 foreach ($arr as &$value)。
示例:
立即学习“PHP免费学习笔记(深入)”;
$nums = [1, 2, 3];
foreach ($nums as &$n) {
$n *= 2;
}
// $nums 变成 [2, 4, 6]
- 漏掉
&就只是复制值,原数组不变 - 循环结束后记得
unset($n),否则$n仍引用最后一个元素,后续赋值可能意外改到数组末尾 - 不能对键加引用(
$key => &$value合法,但&$key => $value语法错误)
真正麻烦的是边遍历边增删元素——PHP 不保证行为一致,不同版本结果可能不同。真要这么做,先用 array_keys() 拿出所有键,再单独循环处理。



















