开发者学堂课程【PHP 基础入门课程(下):For 循环】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/710/detail/12617
For 循环
目标:掌握 for 循环的语法结构,熟练使用 for 循环实现代码重复执行
1.概念
for 循环:一种将循环初始条件、循环边界条件和循环条件变更都可以放到循环内部结构里(不是循环体)的循环
.for 循环需要循环初始化条件,但可以在循环结构里
·for 循环需要边界条件,也可以放在循环结构里
.for 循环进行循环条件变更,也可以放到结构里
·for 循环一般用来实现一些固定起始、边界和步长(条件变化的规律)的循环,多与数字有关
.for 语法结构
for(初始化条件表达式:边界判定表达式;条件变更表达式){
循环体
}
注:;不能少
2.步骤
1)确定循环初始化条件
2)确定边界条件
3)确定变化规则(步长)
4)确定循环体
3.示例
输出1-100之间的所有奇数
#确定初始条件:1:$i=1:
#确定边界条件:100:$i <= 100;
#确定条件变化规则:1-100的整数:$i++
#确定循环体:输出变化中的$i:奇数:$1%2==1
for($i = 1;$i <= 100;$i++){
#循环体:找到奇数
if($i % 2 == 1){
#说明是奇数
echo $i;
}
举例操作
<?php
#for 循环
#打印1-100之间的基数
#1、初始条件:$i=1
#2、边界条件:$i<= 100
#3、条件变更方式:$i++
for( $i = 1; $i <= 100; $i++){
#4、循环体
if($i % 2 == 1){
echo $i,'<br/>
';
}
}
运行结果:
可以看出循环有个特点,要么是一列输出,要么是一行输出。证明他是线性的而不是面性的。
循环嵌套:打印九九乘法表
#打印九九乘法表:一个循环要么打印一行1,2,3,4,5,要么打印一列(<br/>)
#而九九乘法表是一个表格,有行有列:所以单个循环肯定无法完成,需要多个循环共同完成
#分析
#1、确定一个循环:能够打印9行
for($i =1:$i <= 9;$i++){
#9行其实就是一个换行符代表换一行
echo '<br/>';
}
操作实例
#打印九九乘法表#1、打印9行
for($i = 1;$i <= 9;$i++){
echo $i,'<br/>';
}
运行结果:
#2、确定一个循环:能够输出9列
for($j = 1;$j <= 9;$j++){
echo $j;
}
举例操作
#2、打印9列
for($j = 1;$j <= 9;$j++){
echo $j;
}
需要思考是是出来结果是这样的
两列九九八十一就出现了
#3、以上两个是独立的循环,彼此没有交集:我们需要一行里就有9列,而不是只有一列:将能够输出9列的循环移入到能输出行的循环中
for($i = 1;$í <= 9;$i++){
#将打印9列的循环移入到能打印行的循环中:实现9行9列输出
for($j = 1;$j <= 9;$j++){
echo $j;
}
#9行其实就是一个换行符代表换一行
echo '<br/>';
实例操作
#打印九九乘法表#1、打印9行
for($i = 1;$i i <= 9;$i++){
#3、将打印列的循环搬进来
for($j = 1;$j <= 9;$j++){
echo $j;
}
echo $i,'<br/>';
}
运行结果:
这个时候就变成了九行九列。
#4、确定每一个单元的输出:九九乘法表并非一直输出,输出逻辑是:列数不大于行数,从第一列开始输出,第1个数为列号,第二个乘数为行号
/*
1*1=1
1*2=2 2*2 = 4
#第一个数1.2为列数,第二个数2位行数
/*
for($i = 1:$i <= 9;$i++){
#将打印9列的循环移入到能打印行的循环中:实现9行9列输出
for($j = 1;$j <= 9;$j++){
#输出:确保列数不能大于行数
if($i <= $i){
结论添加$j * $i
#打印九九乘法表#1、打印9行
for($i = 1;$i <= 9;$i++){
#3、将打印列的循环搬进来
for($j = 1;$j <= 9;$j++){
echo "$j * $i = " .$j * $i;
}
echo $i,"<br/>';
}
得出结论j不能大于 i,因此还需要做条件
for($i = 1;$i <= 9;$i++){
#3、将打印列的循环搬进来
for($j = 1;$j <= 9;$j++){
#4、输出:判定条件:前面的数不能大于后面的数
if($j <= $i)
echo"$j * $i = " . $j * $i;
}
echo ,'<br/>';
}
结果如图正确
觉的不好看可以添加空格
if($j <= $i)
echo"$j * $i = " . $j * $i .’ ’;
}
echo ,'<br/>';
}
怎样去把循环嵌套打印成一个平面的东西,一个循环只能打印一条线,两个循环嵌套就可以打印一个平面了,三个循环嵌套本质上它可以打印立体。这个时候就知道 for 循环该怎么来使用了。
3.流程图解析
以上图输出1-100之间的奇数为例
graph lR
A(循环开始)-->B[初始化条件<br/>Si=1]
B-->c{条件判定<br/>$i <= 100}
C-->|FALSE|F((循环结束))
C-->|TRUE|D[进入循环体<br/>执行循环体]
D-->G[条件变更<br/>$i+-]
G-->C{条件判定<br/>$i <= 100]
循环开始初始化条件为1,注意只执行一次,条件判定i是否小于等于100,满足条件直接进入循环体,执行完毕之后去找执行条件变更,所以本质和 while 还是一样的,只是写的位置不一样,判定之后又会返回进行条件判定,成功继续执行,101不小于100,结束。判定执行的次数是 n+1,而循环执行的次数和变量的变更都是 n 次。
4.小结
(1)for 循环是可以所有循环参与条件都在 for 循环结构内部的循环
(2)for 循环结构如下
for(表达式1;表达式2;表达式3){
循环体
}
(3)for 循环执行流程
·表达式1:用来初始化条件(只执行一次)
如果初始化条件在外部,该位置可以空出
如果有多个条件需要初始化,该位置可以使用逗号分隔
·表达式2:用来验证条件(起始到边界总次数+1次【最后一次失败循环退出】)
验证通过:进入循环体
验证失败:结束循环
.循环体:执行重复内容(起始到边界总次数)
·表达式3变更微环条件(起始到边界总次数)
(4)for 循环实际通常用来做一些明确次数的循环
举例操作
#遍历数组
$arr =[1,3,4,6,9];
for($key = 0; $key < count($arr);$key++){
echo $arr[$key];
}
count($arr)
意味着函数在被不断调用 n 次,所以把他改成
for($key = 0,$len = count($arr); $key < $len;$key++){
这样函数只被调用了一次,是一种优化,效果是一样的。