PHP -- 循环

if语句:

$day = date('w');

    if($day == 0){
        echo '星期天';
    }else if($day == 1){
        echo '星期一';
    }else if($day == 2){
        echo '星期二';
    }
    else if($day == 3){
        echo '星期三';
    }
    else if($day == 4){
        echo '星期四';
    }
    else if($day == 5){
        echo '星期五';
    }
    else if($day == 6){
        echo '星期六';
    }

echo date('G-i-s');//时分秒,G表示24小时制,h表示12小时制
image.png

switch语句:

switch 语句一行接一行地执行(实际上是语句接语句)。
开始时没有代码被执行。
仅当一个 case 语句中的值和 switch 表达式的值匹配时 PHP 才开始执行语句,
直到 switch 的程序段结束或者遇到第一个 break 语句为止。
如果不在 case 的语句段最后写上 break 的话,PHP 将继续执行下一个 case 中的语句段。

w在date()函数中:
w - 星期几的数字表示(0 表示 Sunday[星期日],6 表示 Saturday[星期六])

case后面的数字0-6并不是case的编号,而是case的值

在下面这个例子中,case 6的值是6,表达式的值也是6,所以条件成立
结果输出星期六

 default。它匹配了任何和其它 case 都不匹配的情况。他是case的特例
相当于else,他后面写不写break都一样,不会报错,一般不写。

$day = date('w');

switch($day){
    case 0: echo'星期天';break;
    case 1: echo'星期一';break;
    case 2: echo'星期二';break;
    case 3: echo'星期三';break;
    case 4: echo'星期四';break;
    case 5: echo'星期五';break;
    case 6: echo'星期六';break;
    default:echo '参数有误';
}


循环结构:
while:

while(表达式){
代码块
循环结束的语句/条件(这个判断条件也可以写在表达式中)
}

do...while:只有一种语法:
do...while和一般的 while 循环主要的区别是 do-while 的循环语句至少会执行一次

$i = 0;
do {
echo $i;
} while ( $i > 0);

for:

for ($i = 1; $i <= 10; $i++) {
echo $i;
}

foreach:(foreach 仅能够应用于数组和对象)
有两种语法:

foreach (array_expression as $value)
statement

foreach (array_expression as $key => $value)
statement

第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。

第二种格式做同样的事,只除了当前单元的键名也会在每次循环中被赋给变量 $key。


while:
例子1:
计算 1 + 2 + 3 ...+ 100 = 5050

$i=1;
$sum=0;

while($i<101){   
    $sum = $sum + $i;
    //等号左边是$sum加之后的值
    //等号右边是$sum没有加的值
    //每次都把新的值加给$sum
    //$sum的值每一次都在增加
    $i++;
    
}
echo $sum;

例子2:
计算100以内奇数和

做法一:
$i = 1;  
$sum = 0;

while($i <=100){
    if($i%2 != 0){
        $sum = $sum + $i;
    }
    $i = $i+2; //$i++;这样写的话,是偶数的项时也会计算
}
echo $sum;


做法二:
$sum = 0;
for($i=1;$i<=100;$i++){
    if($i%2==1){
        $sum += $i;
    }
}
echo $sum;

image.png

do ...while
循环遍历指定代码,只要指定条件为真,就重复循环

$i = 1;  
$sum = 0;

do{
    $sum = $sum + $i;
    $i = $i+2;
}while($i <=100);

echo $sum;


for循环:
for当事先知道脚本应运行多少次时,将使用该循环。

句法:

for (init counter; test counter; increment counter) {
code to be executed;
}

参数:

init counter:初始化循环计数器值\color{rgba(254, 67, 101, .8)}{(初始化表达式)}

test counter:针对每个循环迭代进行评估。如果它的计算结果为TRUE,则循环继续。如果计算结果为FALSE,则循环结束。\color{rgba(254, 67, 101, .8)}{(条件表达式)}

increment counter:增加循环计数器值\color{rgba(254, 67, 101, .8)}{(更新表达式) }

计算: 1+2+3...+100=?


for($i=1,$sum = 0;$i<=100; $i++){
    $sum = $sum + $i;    
}

echo $sum;
$i=1; 可以写在for循环外面
$i++可以写在 $sum = $sum + $i;下面
除了中间的表达式必写以外,前后的初始化表达式和更新表达式都可以写外面。
如果这样写for(;;){}括号内没有任何一个表达式的话,就成了死循环
image.png

嵌套循环:
输出图形:
*
**
***
****
*****

$row = 5;
for($i=1; $i<=$row; $i++){//一共有多少行就循环多少次
    //每行有多少个就循环多少次
    for($j=1; $j<=$i; $j++){
        echo '*';
    }
    echo '<br/>';
}

image.png

打印图形,每次打印图形比上一次多两个:

打印图形每行比上一行多两个

规律:
i = 1  j = 1 = 2*1-1
i = 2  j = 3 = 2*2-1
i = 3  j = 5 = 2*3-1 

$row = 5;
for($i=1; $i<=$row; $i++){//一共有多少行就循环多少次
    //每行有多少个就循环多少次
    for($j=1; $j<=2*$i-1; $j++){

        echo '* ';

    }
    echo '<br/>';
image.png

练习题:
1.九九乘法表

  1. 过桥问题:
    一个人有10,0000元,去过桥,当钱数大于50000时,每次收5%税,当钱少于等于50000.每次收5000,问这个人可以过几次桥
    3.百钱白鸡:
    算经:鸡翁一值钱五,鸡母一值钱三,鸡雏三值钱一,百钱买百鸡,问鸡翁、鸡母、鸡雏各几何。

1.九九乘法表
&times; 就是 ×这只是一个符号,不能做乘法运算

规律:
i = 1  1*1=1 
i = 2  1*2=2 2*2=4
i = 3  1*3=3 2*3=6 3*3=9
乘法的第一项正好是j,而第二项正好是i,
第二项在每一行中不变,例如1*  2  = 2  2*  2  = 4,第二项是2,是不变的

// &times;乘号

$row = 9;
for($i=1; $i<=$row; $i++){//一共有多少行就循环多少次
    //每行有多少个就循环多少次
    for($j=1; $j<=$i; $j++){
        echo $j,'&times;',$i,'=',$i*$j,'&nbsp';
    }
    echo '<br/>';
}
image.png

乘法表例题扩展:


// &times;乘号
// caption只在table里有居中的效果
// 不在table里就是普通文本,没有其他效果

echo '<table width="600">';
echo '<caption>九九乘法表</caption>';
for($i=1; $i<=9; $i++){
    echo'<tr>';
    for($j=1; $j<=$i; $j++){
        echo'<td>', $j,'&times;',$i,'=',$i*$j,'</td>';
    }
    echo '</tr>';
}
echo '</table>';
image.png

打印等腰三角形:

打印等腰三角形

     *
    ***
   *****
  *******
 *********

 i=1 4   5-1(第一个星号之前有这么多个空格)  
 i=2 3   5-2
 i=3 2   5-3 
 i=4 1   5-4
 i=5 0   5-5

$sum=4;
for($i = 1; $i <= $sum; $i++){//输出的每一行
    for($m=1; $m<=$sum-$i; $m++){//每一行的空格数
        echo '&nbsp;';
    }
    for($j = 1; $j <= (2*$i-1); $j++){//每一行的星号个数
        echo '*';
    }
    echo '<br/>';
}
image.png

空心等腰三角形:
代码和视频一模一样,但是结果有问题:

$row=10;//星号层数
for($i=1; $i<=$row; $i++){//输出的每一行
    for($m=1; $m<=$row-$i; $m++){//每一行的空格数
        echo '&nbsp;';
    }
    for($j=1; $j<=(2*$i-1); $j++){//每一行的星号个数
        if($i==1 || $i==$row){//如果是第一行和最后一行全打印
            echo '*';
        }else{
            if($j==1 || $j==2*$i-1){//第一个*和最后一个*打印
                echo '*';
            }else{//其他时候打印空格
                echo '&nbsp;';
            }
        }
    }
    echo '<br/>';
}
image.png

过桥问题:
一个人有10,0000元,去过桥,当钱数大于50000时,每次收5%税,当钱少于等于50000.每次收5000,问这个人可以过几次桥

// 过桥问题:
//钱大于5000才让过
$money = 100000;
$num = 0;
while($money>5000){//while循环一次相当于过一次桥
    if($money>50000){//钱超过50000时
        $money = $money-$money*0.05;
    }else{
        $money -= 5000;//钱少于50000时,每次收5000
    }
    $num++;
}
echo $num;
image.png

过桥第二种写法:

// 过桥问题:
//先不查验钱的多少,进入循环再查
$money = 100000;
$num = 0;
while($money>0){//无论有钱没钱,先过再查
    if($money>5000){//当钱大于5000时允许过桥,否则不让过
    
        if($money>50000){//当钱大于50000时的收费
            $money = $money-$money*0.05;
        }else{//当钱少于50000时的收费
            $money -= 5000;
        }
        $num++;
        
    }else{//钱不够5000,不让过桥,直接跳出循环
        break 1;
    }
}
echo $num;

上面这个例子用到了break,break后面的数字是1的话可以不写。
break后面是可以跟数字的,这个数字代表他要跳出几层循环,这里break外只有1层循环,所以只能是1,如果有多层循环需要跳出,可以写其他数字,但是只有1层循环,这里写2的话,就会报错。


百钱白鸡问题:
第一种写法:
一共要循环100 * 100 * 100次,



for($g=1; $g<=100; $g++){//只要$g<=100就继续循环
    for($m=1; $m<=100;$m++){//只要$g<=100;且$m<=100;就继续循环
        for($x=1; $x<=100;$x++){//只要$g<=100;且$m<=100;且$x<=100;就继续循环
        
            if($g+$m+$x == 100 && 5*$g+3*$m+$x/3 == 100){
        //在for循环条件成立的前提下,当鸡翁、鸡母、鸡雏相加=100,且鸡翁、鸡母、鸡雏价格=100时,输出$g $m $x的值.
                echo "鸡翁:$g 只, 鸡母:$m 只 鸡雏:$x 只<br />";  
                
            }
        }
    }
}
image.png

第二种写法:
这种写法只需要写20*33次就可以了

for($g=1; $g<=20; $g++){//只要$g<=20就继续循环,公鸡不可能超过20只
    for($m=1; $m<=33;$m++){//只要$g<=20;且$m<=33;就继续循环,母鸡不可能超过33只
        $x = 100-$g-$m;//上面有了公鸡/母鸡的只数,只需要用100减去他们的值就好了.
        if($g+$m+$x == 100 && 5*$g+3*$m+$x/3 == 100){
            echo "鸡翁:$g 只, 鸡母:$m 只 鸡雏:$x 只<br />";  
        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容