一、 前言:当你盯着数组发呆时,foreach正在骑马赶来的路上
朋友们,有没有过这种经历?你看着PHP里那个装满数据的数组,就像看着一个塞爆的衣柜——你知道里面有件超棒的T恤(就是你想要的数据),但得一件件翻(循环)才能找到。这时候你开始写for循环:for($i=0; $i<count($array); $i++)...停!别数了!
来看看咱们今天的主角:foreach循环。这货简直就是数组遍历界的“外卖小哥”,直接把你点的菜(数组元素)送到门口,连包装都帮你拆好了!
我记得自己刚学PHP时,硬是用for循环遍历关联数组,结果死活取不出值,差点把键盘吃了。直到发现了foreach...那一刻仿佛看到了光!今天,我就把这个“神器”彻底扒开给你看,保证你看完后再也不想用别的循环处理数组了!
二、 基础操作:foreach的“标准送货姿势”
2.1 最基础的用法——只要值,不要“钥匙”
有时候你去取快递,只关心包裹里是啥,不在乎快递单号(索引)。foreach也懂你这心思:
$fruits = ["苹果", "香蕉", "草莓", "芒果"];
echo "冰箱里有:";
foreach ($fruits as $fruit) {
echo $fruit . "、";
}
// 输出:冰箱里有:苹果、香蕉、草莓、芒果、
看明白了吗?$fruits as $fruit 这写法就像在说:“把$fruits数组里的每个元素,临时叫做$fruit”。循环一次,$fruit就变一次身——先是苹果,再是香蕉...
实用场景:生成下拉菜单选项、批量处理数据、简单列表展示。我当年做电商网站,用这招渲染商品分类菜单,10行代码搞定原来30行的活儿!
2.2 进阶玩法——连“钥匙”一起拿下
但有时候吧,你不仅想知道包裹里是啥,还得看看快递单号(尤其是关联数组的时候)。这时候就需要键值配对登场了:
$studentScores = [
"小明" => 92,
"小红" => 88,
"小刚" => 75,
"小花" => 96
];
echo "期末成绩单:<br>";
foreach ($studentScores as $name => $score) {
echo $name . "考了" . $score . "分<br>";
// 还能顺便判断下成绩
if ($score > 90) {
echo "→ 学霸啊!<br>";
}
}
这个$name => $score结构,箭头符号=>特别形象——就像从名字指向分数。关联数组遍历没有这招简直寸步难行!
真实案例:我同事曾经用for循环遍历$_POST表单数据(这是个关联数组),结果毛都取不出来,加班到凌晨。第二天我给他改成foreach,3分钟搞定。他那表情,我至今难忘。
三、 原理深挖:foreach到底在背后搞什么鬼?
3.1 不是所有“数组”都是真数组
这里有个坑我得先提醒你!PHP的数组实际上是“有序映射”,这设计很强大但也容易让人误解。
$arr = [10 => "十", 20 => "二十", 30 => "三十"];
// 如果用for循环?翻车预定!
for ($i = 0; $i < count($arr); $i++) {
echo $arr[$i] ?? "不存在"; // 全输出“不存在”!
}
// foreach微微一笑
foreach ($arr as $key => $value) {
echo "键:$key, 值:$value<br>"; // 完美输出
}
看到没?这数组的键是10、20、30,根本不是0、1、2!for循环还傻乎乎地从0开始找,当然找不到东西。foreach就聪明多了,它不假设任何索引规律,直接按实际存储的键值对来取。
3.2 引用传递:边遍历边“搞破坏”
有时候你不只想看看包裹,还想拆开改改里面的东西。这时候就需要引用传递了:
$prices = [100, 200, 300, 400];
echo "双十一大促!全场五折!<br>";
foreach ($prices as &$price) {
$price = $price * 0.5; // 直接修改原数组!
}
print_r($prices); // 全部变成[50, 100, 150, 200]
// 重要提醒!用完后记得“销毁”引用变量
uns

最低0.47元/天 解锁文章
3264

被折叠的 条评论
为什么被折叠?



