流程控制之循环
For循环
说明:循环就是自动执行某段代码、循环执行
语法:for(变量初始化;条件表达式’变量变化){
循环体;
}
- 变量初始化:循环的开始,给一个循环的变量,如$i=1;
- 条件表达式:必须给循环一个可以退出的条件,否则就是死循环。如$i<=10;
- 变量变化:让初始化的值发生改变,一直到达到条件为止。$i<=10;
流程控制图:

案例:1
输出1-100
<?php
for($i=1; $i<=100;$i++){
echo $i.'<br>’;//打印结果1-100并且换行
}
?>
案例:2
输出99乘法表
//分析:首先九九乘法表是由九行九列组成,先打印九行
For($i=1;$i<10;$i++){echo $i;}这是打印九行
根据外循环控制行数,内循环控制列数,那么打印九列就是在九for循环中再套一层for循环即for($i=1;$i<=9;$i++){
For($j=1;$j<=9;$j++){
Echo “$i x $j =”.$i*$j.’ ’;
}
echo “<br>”;

}打印出来的是一个9行9列的矩形,但是我们的乘法表是一个递减的三角形,行数不变列数逐渐递减,内部循环控制列数,也就是$j控制的表达式不是一直是9,我们可以看出第一行的时候只有一列,第二行的时候只有两列,直到第9行的时候有9列,从而可以分析出,行数和列数的增加的基数是一样的,就可以判定$j的取值范围就是$j<=$i
即:
for($i=1;$i<=9;$i++){
For($j=1;$j<=$i;$j++){
Echo “$i x $j =”.$i*$j.’ ’;
}
echo “<br>”;
}

看出$i和$j位置反了,换一下位置即可
把Echo “$i x $j =”.$i*$j.’ ’;
换成Echo “$jx $i =”.$i*$j.’ ’;
<?php
for($i=1;$i<=9;$i++){
For($j=1;$j<=$i;$j++){
Echo “$j x $i =”.$i*$j.’ ’;
}
echo “<br>”;
}
?>
案例2:打印金字塔
//打印金字塔
for($i=1; $i<=6; $i++){
for($a=6; $a>$i; $a–){
echo “ ”;
}
for($j=1; $j<=$i; $j++){
echo ‘* ’;
}
echo ‘<br>’;
}

案例3打印空心菱形
echo ‘<hr>’;
//打印空心菱形
for($i=1; $i<=6; $i++){
for($a=1; $a<=6-$i; $a++){
echo “ ”;
}
for($j=1; $j<=$i*2-1; $j++){
if($i==1){
echo ‘*’;
}elseif($j==1||$j==$i*2-1){
echo ‘*’;
}else{
echo ‘ ’;
}
}
echo ‘<br>’;
}
for($i=5; $i>=1; $i–){
for($a=1; $a<=6-$i; $a++){
echo “ ”;
}
for($j=1; $j<=$i*2-1; $j++){
if($i==1){
echo ‘*’;
}elseif($j==1 || $j==$i*2-1){
echo ‘*’;
}else{
echo “ ”;
}
}
echo ‘<br>’;
}
实战案例1
一张纸的厚度是0.01毫米,则该纸对折30次后是多厚(据说超过珠穆朗玛峰的高度)。反过来,一张纸对折几次后,就超过1米厚了?
$p=0.01/1000;//把毫米换成米
for($i=1; $i<=30; $i++){
$p=$p*2;
echo "对折{$i}次后的厚度为{$p}<br>";
//判断当厚度超过1m后的次数
if($p>=1&&$p<2){
echo '<hr>';
echo '对折第'.$i.'次后的厚度超过1m';
echo '<hr>';
}
}

实战案例2
写一个程序输出1到100这些数字。但是遇到数字为3的倍数的时候,输出“三”替代数字,为5的倍数用“五”代替,既是3的倍数又是5的倍数则输出“三五”。
for($i=1;$i<=100;$i++){
if($i%3==0&&$i%5==0){
echo '三五';
}elseif($i%3==0){
echo '三';
}elseif($i%5==0){
echo'五';
}else{
echo $i;
}
echo '<br>';
}
while循环
语法:变量的初始值;
while(条件表达式){
循环体;
变量的变化;
}
循环1-100
<?php
$i=1;
while($i<=100){
echo $i;
$i++;
}
?>
案例2:99乘法表
<?php
$i=1;
while($i<=9){
$j=1;
while($j<=$i){
echo"$j x $i = ".$j*$i;
$j++;
}
echo '<br>';
$i++;
}
?>
实战案例1
假设某人有100,000现金。每经过一次路口需要进行一次交费。交费规则为当他现金大于50,000时每次需要交5%如果现金小于等于50,000时每次交5,000。请写一程序计算此人可以经过多少次这个路口。
$m=100000;
$k=1;
while($m>=5000){
if($m>50000){
$m=$m*0.95;
}elseif($m<=50000){
$m=$m-5000;
}
echo '剩余'.$m.'经过'.$k.'<br>';
$k++;
}