PHP基础教程(61)PHP循环控制语句之foreach循环语句:告别循环恐惧!这个PHP“快递员”让你数组遍历爽到飞起

一、 前言:当你盯着数组发呆时,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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值