PHP -- 循环

作者: 潘肚饿兵哥哥 | 来源:发表于2019-07-02 19:14 被阅读0次

    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 />";  
            }
        }
    }
    

    相关文章

      网友评论

        本文标题:PHP -- 循环

        本文链接:https://www.haomeiwen.com/subject/chapcctx.html