PHP foreach 怎么用

你有没有过整理衣服的经历?打开衣柜,把一件T恤、一条牛仔裤、一件外套按顺序拿出来,叠好放进收纳盒。写代码的时候,“循环处理一组数据”就像整理衣服,而PHP里的foreach,就是专门帮你“按顺序取数据、处理数据”的小工具——它比别的循环(比如for)更省心,不用你数“第几个、总共有多少个”,只要告诉它“要处理哪组数据”,它就会自动一个个拿出来处理。

先从最基础的用法学起:遍历数组的“值”

假设你有个朋友群,群里5个人的名字存在一个数组里:$names = ["小明", "小红", "小刚", "小丽", "小强"]。现在要把每个人的名字打印出来,用foreach怎么写?

PHP foreach 怎么用

很简单,就像你喊每个人的名字一样,foreach会把数组里的每个值挨个交给你定义的变量(比如叫$name)。代码是这样的:

`php

$names = ["小明", "小红", "小刚", "小丽", "小强"];

foreach ($names as $name) {

echo "群成员:" . $name . "<br>";

}

`

是不是像在说“把$names里的每一项,都拿出来当$name处理”?运行后会一行一个人名,完全不用你手动数“现在是第1个、第2个”——foreach会自动帮你数,直到把所有值取完为止,就算数组有1000个名字,也不用改代码,这就是它省心的地方。

进阶用法:同时拿“键和值”

有时候你需要知道“这个数据是在数组的第几个位置”(也就是数组的“键”),比如要给群成员标上编号(1号到5号),这时候foreach可以同时拿到键和值。

还是用刚才的$names数组,代码改一下:

`php

$names = ["小明", "小红", "小刚", "小丽", "小强"];

foreach ($names as $key => $name) {

// 数组的键默认从0开始,所以加1就是咱们习惯的编号

echo "群成员" . ($key + 1) . ":" . $name . "<br>";

}

`

这里的$key就是每个值对应的位置编号,从小明的0开始,小红的1,以此类推。如果是关联数组(就是你给每个值起了别名,比如$age = ["小明" => 18, "小红" => 17]),$key就会是“小明”“小红”这种别名,你可以用这个别名对应处理不同的数据,就像给每个收纳盒贴了专属标签,找东西更方便。

容易踩的小坑:别在循环里改数组本身

用foreach的时候有个小细节要注意:如果在循环里直接修改数组本身,可能会出问题。比如你想把群里的名字都加个“同学”后缀,要是这么写:

`php

$names = ["小明", "小红"];

foreach ($names as $name) {

$name .= "同学"; // 只改了变量$name,没改原数组

}

// 打印数组,会发现名字还是原来的

print_r($names);

`

为什么?因为as $name是把数组里的值“复制”给$name变量,改$name不会影响原数组。要改原数组,得直接用键操作:

`php

$names = ["小明", "小红"];

foreach ($names as $key => $name) {

$names[$key] = $name . "同学";

}

print_r($names); // 现在会变成 ["小明同学", "小红同学"]

`

如果是引用数组里的元素(加&符号),改$name就能直接改原数组,比如foreach ($names as &$name),但用完记得把引用断开(unset($name)),不然会影响后面的代码——就像你借了朋友的笔记本改内容,用完要把笔记本还给人家,别留着引用乱改。

其实foreach的核心,就是“帮你省掉手动计数的麻烦”,不管是数组还是更复杂的数据集(比如数据库查出来的多条记录),用它都能轻松遍历处理。只要记得:基础用法拿值,进阶用法拿键+值,改数据别直接改循环变量,就不会踩坑啦。

上一篇 TypeScript 怎么查看版本