循环控制|学习笔记

简介: 快速学习循环控制

开发者学堂课程【PHP 基础入门课程(下)循环控制】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/710/detail/12620


循环控制


目标:掌握循环控制的基本原理和实际需求,利用循环控制实现循环内部控制

提问:如果在循环执行过程中出现了某些异常或者某些不符合条件的,能怎么办?

回答:循环控制

1.概念

循环控制:即循环体内通过代码对控制循环如何执行

(1)循环体内控制代码的执行方向

(2)循环控制是为了增加程序的健壮性,让开发者可以在循环内部把握循环的正确执行。

(3)根据需求(条件)进行控制

.终止单次循环体执行:continue[层级],层级默认1(直接进行下一次循环)

.终止循环(循环结束);break[层级],层级默认1

2.步骤

(1)循环开始

(2)循环体内是否需要判定条件

.条件满足:选择控制

确定控制层级(单层循环不需要)

.条件不满足:不需要控制

3.示例

(1.)求出1-100之间所有非3的倍数的和

#定义初始变量(使用 while 循环)

$i = 1;

$sum = 0; #记录和

while($i <= 100){

#确定当前变量$i 是否是3的倍数

if($i % 3 == 0){

#是3的倍数:这个值不记录:但是后续的代码不用再执行(注意条件要变化)

$i++;

continue; #continue 之后的循环体不执行

}

#求和:同时变更变量

$sum += $i++; #等价于:$sum=$sum + $i++(后置自操作,先使用原值,后自操作)

}

实例操作:

<?php

#循环控制

#求1-100之间不是3的倍数的整数的和

$i = 1;

$sum=0;

while($i <= 100){

#先判定

if($i % 3 == 0){

#是3的倍数

#终止向下执行循环体:没有价值了

continue;

}

#继续执行:非3的倍数

$sum+= $i++;

}

但是这个循环有个致命问题,循环变量永远没有改变,所以此时要对他进行改变,所以进行一个$sum+= $i++;,但是他还是死循环,

所以要进行一个条件变更。

while($i <= 100){

#先判定

if($i % 3 == 0){

#是3的倍数

#终止向下执行循环体:没有价值了

$i++;

continue;

}

#继续执行:非3的倍数

$sum+= $i++;

}

这种操作就基于这个知识点本身而讲,这样做比较复杂。

运行结果:

image.png

(2.)求出1-100之间所有的数的和

#定义初始变量

$i = 1;

$sum = 0;

#开始循环:条件永远为真

while tTRUE){

#外部没有进行条件控制:说明循环是死循环,我们要在内部保证循环不会一直执行

if($i > 100){

#已经不满足需求:循环没有必要继续

break;

}

#如果前面条件不满足:说明当前是满足循环要求的,继续执行

$sum += $i++:

}

实例操作:

#求和1-100(内部控制条件)

$i = 1;

$sum=0;

while(TRUE){

#循环控制

if($i > 100){

break;

}

#求和

$sum+= $i++

}

echo $sum;

(3.)九九乘法表优化

#原九九乘法表

for($i = 1;$i <= 9;$i++){

#将打印9列的循环移入到能打印行的循环中:实现9行9列输出

for($j = 1;$j <= 9;$j++){

#输出:确保列数不能大于行数

if($j <= $i){

#有效输出位置:列号在前,行号在后

echo "$i * $i =". $i * $i ."'; #输出带一个空格

#"$j* $i ="是一个字符串只会解析变量,Sit $i是一个乘法表达式,会得出结果

}

}

#9行其实就是一个换行符代表换一行

echo '<br/>';}

#问题:当内存循环$i>$i之后,虽然不会输出,但是内层 for 循环会一直执行直到$i>9,这部分是无效执行:所以应当优化,即内存循环$j>$i之后已经没有执行的意义了(结束循环)

for($i = 1;$i <= 9;Si++){

#将打印9列的循环移入到能打印行的循环中:实现9行9列输出

for(sj = 1;$j <= 9;$j++){

#输出:确保列数不能大于行数

if($j <= $i){

#有效输出位置:列号在前,行号在后

echo "$i * $i =". $i* $i .’ ': #输出带一个空格

#"$j *$i ="是一个字符串只会解析变量,sj*si是一个乘法表达式,会得出结果

}

}else{

#循环控制:进入 e1se 说明$;>$i,已经失去意义了

break; #当前 break 是控制所属循环(j 循环),所以终止也是当前j循环,进入到 i 据环执行<br>

}

}

#9行其实就是一个换行符代表换一行

echo '<br/>':}

实例操作优化版九九乘法表

for($i = 1;$i i <= 9;$i++){

for($j = 1;$j <= 9;$j++){

echo "$j * $i = " . $j * $i .' ';

}

#换行

echo '<br/>';

}

运行结果:

image.png

输出九九八十一个,但应该是有条件的

for($i = 1;$i i <= 9;$i++){

for($j = 1;$j <= 9;$j++){

if($j <= $i){

echo "$j * $i = " . $j * $i .' ';

}else{

#此时 j 已经大于 i:没有必要内存循环再执行

break;

}

}

#换行

echo '<br/>';

}

运行结果:

image.png

其中有些问题,例如 i=1.j=1第一次,j<=9满足条件,j1<=1输出,此时循环进入到 j++,j 变成2,2满足条件<=9,但2进来已经没有含义了,2一定是大于 i 的,所以 if 不会执行,但循环依然会从2变到3,4,5,6,7直到变到10,循环结束,此时进行控制,

#优版乘法表

for($i = 1;$i <= 9;$i++){

for($j = 1;$j <= 9;$j++){

if($j <= $i){

echo "$j * $i = ". $j * $i .' ';

}else{

#此时 j 已经大于 i,没有必要内存循环在执行

Break;

}

}

#换行

echo '<br/>';

}

运行结果与之前效果一样

image.png

#最优版乘法表

for($i = 1;$i <= 9;$i++){

for($j = 1;$j <= $i;$j++){

echo "$j * $i = ". $j * $i .' ';

}

#换行

echo '<br/>';

}

运行结果:再次执行效果一样

image.png

4.continue 流程控制

graph lR

A(循环开始)-->B{循环条件判定
大条件}

B->|不满足条件|D((循环结束))

B-->|满足条件|c[执行循环体]

C-->E{内部条件判定
后续代码是否需要执行}

E-->|需要|F[后续代码继续执行]

E-->|不需要|B

F-->B

image.png

开始循环条件判定大条件,大条件如果不满足的循环自然就结束了如果,满足条件进去执行循环,然后循环体之后要考虑内部是否有条件判定,这种条件就是后续代码有没有必要执行,当前条件是否满足,如果说后面已经不需要了,那么此时就回来,那么这种不需要 continue,如果需要执行就不需要 continue,把整个循环执行完在执行代码。

Break 流程控制

image.png

大条件外部的进来之后执行,执行之后看看内部条件判定是否需要继续执行,不需要直接让循环结束,不要再去执行了,如果需要,后期代码继续执行,那么都有一个特点就是不论 continue 还是 Break 他都会让后续代码不执行,区别就是 continue 会让循环再来,进行下一次,而 break 是直接让循环结束。

5.小结

(1)循环控制是在循环内部提供了一种可以控制循环的机制

·内部控制,给开发者提供灵活性

·内部控制,给开发者提供优化空间(省去不必要的循环)

(2)循环控制分为两种

·终止单次循环:continue

·终止整个循环:break

(3)循环控制有层级,如果在多层循环中需要控制到不同的层级,可以使用层级数

·continue[N]:回到 N 层循环继续下一次循环开始

·break[N]:跳出到 N+1层循环,如果没有 N+1层循环,循环结束

·N 如果为1,那么可以省去

相关文章
|
6月前
|
自然语言处理 关系型数据库 MySQL
MySQL索引有哪些类型?
● 普通索引:最基本的索引,没有任何限制。 ● 唯一索引:索引列的值必须唯一,但可以有空值。可以创建组合索引,则列值的组合必须唯一。 ● 主键索引:是特殊的唯一索引,不可以有空值,且表中只存在一个该值。 ● 组合索引:多列值组成一个索引,用于组合搜索,效率高于索引合并。 ● 全文索引:对文本的内容进行分词,进行搜索。
|
9月前
|
机器学习/深度学习 人工智能 搜索推荐
AI在电子商务中的个性化推荐系统:驱动用户体验升级
AI在电子商务中的个性化推荐系统:驱动用户体验升级
1137 17
|
10月前
|
自然语言处理 关系型数据库 MySQL
MySQL全文搜索
如何使用MySQL全文搜索功能。
171 0
|
9月前
|
弹性计算 Linux 网络安全
阿里云服务器怎么登陆,常见登陆方式教程参考
在连接实例时,首先需要完成身份验证,确保只有授权用户能够访问和管理服务器资源,以增强安全性。创建实例时,您可以选择一个系统预设的用户作为初始登陆用户。实例创建完成后,即可用该用户身份登陆。本文将详细介绍不同用户的特点与区别,以及如何管理这些用户和添加额外的远程连接用户。
3956 12
|
安全 关系型数据库 MySQL
MySQL非root安装-初始化数据库时unknown variable ‘defaults-file=**/my.cnf‘
解决安装过程中出现的问题通常需要仔细地检查错误日志、配置文件和执行命令,保证各项配置设置的精确无误是顺利完成安装的关键。通过上述的步骤分析和解决方案,非root用户安装MySQL时遇到"unknown variable 'defaults-file=**/my.cnf'"的问题应该可以得到妥善的解决。
1047 0
|
人工智能 自然语言处理 UED
AIGC遇上ChatGPT,互联网公司的创意设计师,还能做什么?
AIGC和ChatGPT为创意设计师开辟新路径。设计师借助AI生成初步设计,提高效率,保持创意主导。ChatGPT革新沟通体验,加速反馈与优化。Adobe国际认证成为设计师专业成长标志,确保技能更新与行业发展同步。在AI时代,设计师需融合技术,持续学习,以创新满足用户需求。
AIGC遇上ChatGPT,互联网公司的创意设计师,还能做什么?
|
数据安全/隐私保护
要赋予自己sudo权限并使用sudo查看/etc/shadow文件的内容
要赋予自己sudo权限并使用sudo查看/etc/shadow文件的内容
316 2
|
存储 Linux 块存储
DRBD+Heratbeat+NFS高可用文件共享存储
DRBD+Heratbeat+NFS高可用文件共享存储
|
存储 分布式计算 供应链
数据中台实战(03)-构建数据中台的三要素:方法论、组织和技术
数据中台实战(03)-构建数据中台的三要素:方法论、组织和技术
830 0
数据中台实战(03)-构建数据中台的三要素:方法论、组织和技术
|
人工智能 API 开发工具
【Auto-GPT】会自主完成任务的 AI!安整的安装&使用教学
【Auto-GPT】会自主完成任务的 AI!安整的安装&使用教学