网易首页 > 网易号 > 正文 申请入驻

在 PHP 中,循环是控制程序流程的核心结构

0
分享至

在 PHP 中,循环是控制程序流程的核心结构,合理使用循环能高效处理重复任务。以下是 PHP 中主要循环结构的详细说明及优化技巧:

一、基础循环结构

1.循环

for

php

for ($i = 0; $i < 10; $i++) {

echo $i; // 输出 0-9

  • 适用场景:已知循环次数时(如遍历固定长度数组)。
  • 优化技巧
    • 提前计算循环边界(避免在循环内调用函数):
  • php
  • $count = count($array); // 提前计算
  • for ($i = 0; $i < $count; $i++) { /* ... */ }

2.循环

foreach

php

$array = ['a', 'b', 'c'];

foreach ($array as $value) {

echo $value; // 输出 a, b, c

  • 特性
    • 自动处理数组边界。
    • 支持键值遍历:
  • php
  • foreach ($array as $key => $value) { /* ... */ }
  • 性能建议:PHP 7+ 中比遍历数组更快(因内部优化)。
  • foreach
  • for

3.循环

while

php

$i = 0;

while ($i < 10) {

echo $i++;

  • 适用场景:条件不确定时的循环(如读取文件直到结束)。

4.循环

do-while

php

$i = 0;

do {

echo $i++;

} while ($i < 10);

  • 特点:至少执行一次循环体。

二、循环控制语句

  • :立即退出循环。
  • break
  • :跳过当前迭代,进入下一次循环。
  • continue
  • 带标签的循环控制(PHP 7+):
  • php
  • outerLoop:
  • foreach ($array as $item) {
  • foreach ($item as $value) {
  • if ($value === 'stop') break outerLoop; // 直接跳出外层循环

三、性能优化技巧

1.减少循环内操作

  • 错误示范(每次循环重新计算):
  • php
  • for ($i = 0; $i < count($array); $i++) { /* ... */ }
  • 优化后
  • php
  • $count = count($array);
  • for ($i = 0; $i < $count; $i++) { /* ... */ }

2.避免循环内调用函数

  • 错误示范
  • php
  • foreach ($array as $item) {
  • $processed = processItem($item); // 每次循环调用函数
  • 优化建议:尽量将函数调用移到循环外(若逻辑允许)。

3.使用生成器处理大数据

php

function readLargeFile($path) {

$handle = fopen($path, 'r');

while (!feof($handle)) {

yield fgets($handle); // 逐行读取,避免内存爆炸

fclose($handle);

foreach (readLargeFile('huge.log') as $line) {

processLine($line);

4.循环与引用

  • 注意引用陷阱
  • php
  • $array = [['id' => 1], ['id' => 2]];
  • foreach ($array as &$item) { /* ... */ }
  • unset($item); // 必须取消引用,否则后续操作可能意外修改数组

四、特殊场景处理

1.遍历多维数组

php

$matrix = [[1, 2], [3, 4]];

foreach ($matrix as $row) {

foreach ($row as $value) {

echo $value; // 输出 1, 2, 3, 4

2.循环修改原数组

  • 使用引用
  • php
  • foreach ($array as &$value) {
  • $value *= 2; // 直接修改原数组

3.提前终止循环

php

$found = false;

foreach ($array as $item) {

if ($item === 'target') {

$found = true;

break; // 找到后立即退出

五、性能对比(PHP 8.1 测试)

循环类型

遍历 100 万次耗时

内存使用

for

45ms

2MB

foreach

32ms

2MB

while

48ms

2MB

do-while

47ms

2MB

结论:在数组遍历中性能最佳,在已知次数循环中表现良好。
foreach
for

六、常见问题

  1. 无限循环
  2. php
  3. while (true) {
  4. // 必须包含 break 条件!
  5. if ($condition) break;
  6. 浮点数比较陷阱
  7. php
  8. for ($i = 0; $i < 1.0; $i += 0.1) {
  9. // 可能因浮点精度问题多执行一次
  10. 数组键名修改
  11. php
  12. foreach ($array as $key => $value) {
  13. unset($array[$key]); // 修改正在遍历的数组会导致意外行为

七、最佳实践

  1. 优先使用遍历数组
  2. foreach
  3. 大数据处理用生成器()
  4. yield
  5. 循环前预计算不变条件(如数组长度)。
  6. 避免在循环内修改正在遍历的数组结构
  7. 使用跳过非必要逻辑,减少嵌套层级。

https://m.ximalaya.com/sound/911189203?from=pc
https://www.ximalaya.com/sound/911189203?from=pc

  1. continue

通过合理选择循环结构和优化技巧,可以显著提升 PHP 代码的执行效率和可读性。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
惊险!世锦铅球决赛中,尼日利亚选手扔出的铅球差点砸中裁判头部

惊险!世锦铅球决赛中,尼日利亚选手扔出的铅球差点砸中裁判头部

直播吧
2025-09-17 01:00:18
我为差生代言:从成绩倒数第一的“搞屎棍”到拿诺奖,他估计是全世界最有文化的流氓了

我为差生代言:从成绩倒数第一的“搞屎棍”到拿诺奖,他估计是全世界最有文化的流氓了

超级数学建模
2025-09-14 22:30:32
陷入癫狂:美国老罗引发全行业大清洗

陷入癫狂:美国老罗引发全行业大清洗

美第奇效应
2025-09-14 23:46:52
国内暂无解药!死亡率接近100%!医生开出4瓶白酒救湖北小伙一命

国内暂无解药!死亡率接近100%!医生开出4瓶白酒救湖北小伙一命

朗威游戏说
2025-09-16 11:49:08
郑丽文喊话大陆网友,绝不辜负信任!马英九罕见“下注”

郑丽文喊话大陆网友,绝不辜负信任!马英九罕见“下注”

时尚的弄潮
2025-09-17 10:59:47
王琳17岁时想买一双皮鞋,被妈妈打到牙齿出血:再打我就还手了!

王琳17岁时想买一双皮鞋,被妈妈打到牙齿出血:再打我就还手了!

五四观娱
2025-09-17 00:29:30
关于三星堆,说一些大家不爱听的实话

关于三星堆,说一些大家不爱听的实话

收藏大视界
2025-09-14 17:58:38
午评:创业板指半日涨1.74% 宁德时代、中芯国际双双创历史新高

午评:创业板指半日涨1.74% 宁德时代、中芯国际双双创历史新高

财联社
2025-09-17 11:34:04
史上最大号国产丰田轿车,铂智7即将推出

史上最大号国产丰田轿车,铂智7即将推出

青橙汽车
2025-09-15 16:22:34
官宣中国女篮赛程!CCTV5+直播!大名单有变2人离队,宫鲁鸣明牌

官宣中国女篮赛程!CCTV5+直播!大名单有变2人离队,宫鲁鸣明牌

老吴说体育
2025-09-17 09:55:36
1977年出生!他任广东地级市市长

1977年出生!他任广东地级市市长

知肇分子
2025-09-17 08:19:20
攀附省委书记妻子获提拔的杨慧,认罪悔罪

攀附省委书记妻子获提拔的杨慧,认罪悔罪

新京报政事儿
2025-09-16 16:26:06
5冠预定!杜兰特宣布28年再加盟!字母遭死亡威胁!

5冠预定!杜兰特宣布28年再加盟!字母遭死亡威胁!

柚子说球
2025-09-17 11:57:49
宁夏47岁“巨婴”郭冷,除跳舞连衣服也不会洗,年入百万无人敢嫁

宁夏47岁“巨婴”郭冷,除跳舞连衣服也不会洗,年入百万无人敢嫁

动漫里的童话
2025-09-14 11:40:38
湖南一刚出狱男子持刀杀人致3死1伤:被抓画面流出,死者家属发声

湖南一刚出狱男子持刀杀人致3死1伤:被抓画面流出,死者家属发声

博士观察
2025-09-16 19:32:48
最担心的事发生了!小鹏汇天两架飞行汽车,相撞坠机

最担心的事发生了!小鹏汇天两架飞行汽车,相撞坠机

说财猫
2025-09-16 21:13:15
孙立人高龄去世,棺椁35年未下葬,儿子参加九三阅兵后提出要迁葬

孙立人高龄去世,棺椁35年未下葬,儿子参加九三阅兵后提出要迁葬

小莜读史
2025-09-11 13:31:20
全红婵暨南大学报到才2天,惨遭网友围攻,被嘲“没教养没文化”

全红婵暨南大学报到才2天,惨遭网友围攻,被嘲“没教养没文化”

林轻吟
2025-09-16 09:15:43
花800万买爱马仕的富家千金,破产后在咖啡店当牛马,她却很快乐

花800万买爱马仕的富家千金,破产后在咖啡店当牛马,她却很快乐

禾寒叙
2025-09-09 19:55:06
就在今天下午!冷空气全面影响浙江!浙北高温马上熄火,气温仅“2”字打头

就在今天下午!冷空气全面影响浙江!浙北高温马上熄火,气温仅“2”字打头

FM93浙江交通之声
2025-09-17 06:10:31
2025-09-17 12:11:00
建邺区生态科技岛人工智能商会
建邺区生态科技岛人工智能商会
南京市建邺区生态科技岛人工智能行业商会
55文章数 0关注度
往期回顾 全部

科技要闻

英伟达RTX6000D遇冷,中国大厂不买账

头条要闻

杭州男子买二手车:说好的20万公里 怎么变成20万英里

头条要闻

杭州男子买二手车:说好的20万公里 怎么变成20万英里

体育要闻

什么小火龙?申京已经是MVP水平!

娱乐要闻

官媒发文证实,李乃文再破天花板

财经要闻

曝匹克大幅降薪 员工还要进行"三观培训"

汽车要闻

唐DM-i智驾版175KM长续航版上市售价17.98万起

态度原创

时尚
教育
本地
家居
游戏

气质女人,都少不了亦舒笔下的开衫

教育要闻

探索绿能科技,启航空天之旅

本地新闻

云游忻州 | 慢时光!老街逛吃,烟火气超上头~

家居要闻

江南秘境 理想生活模样

《巫师3》十周年Xbox手柄!官网支持个性化定制

无障碍浏览 进入关怀版