博客列表 >流程控制的深入

流程控制的深入

若是梦终会醒
若是梦终会醒原创
2020年04月20日 15:59:56873浏览

流程控制的深入

1 运算符

1.1 三元运算符 ?:简化双分支

  1. $a=isset($a)?$a:$a='root';
  2. echo $a;//root

1.2 ?? 设置默认值

  1. $a = $a ?? 333;
  2. echo $a . '<br>';//333
  3. $b ?? $b = 444;
  4. echo $b . '<br>';//444
  5. $c ?? $d = 555;
  6. echo $d . '<br>';//555
  7. $a1 ?? 666;
  8. echo $a1.'<br>';//报错未定义
  9. echo $a2 ?? 777;
  10. echo '<br>';//777

小结:

?? 是对 isset()双分支的三元运算 ?: 的进一步缩写 使代码更加简洁;

  1. $a=isset($a)?$a:'root';
  2. //等同于
  3. $a=$a??'root';

2 分支结构

2.1 单分支

使用单分支判断用户名是否为空

  1. $name = $_POST['username'] ?? null;
  2. if ($name===null) :
  3. $arr = ['code' => 1, 'msg' => '用户名为空', 'data' => ''];
  4. var_dump(json_encode($arr, JSON_UNESCAPED_UNICODE));
  5. endif;
  6. //string(44) "{"code":1,"msg":"用户名为空","data":""}"

2.2 双分支

使用双分支判断$n的值范围进行加或者减

  1. function demo($n){
  2. $n>10?--$n:$n++;
  3. return $n;
  4. }
  5. echo demo(8);//9
  6. echo '<br>';
  7. echo demo(18);//17

2.3 多分支

使用多分支判断否是是自己想要的结果

  1. function demo($n)
  2. {
  3. if ($n === 1) :
  4. $res = '输入错误,这是数值1';
  5. elseif ($n === '1') :
  6. $res = '输入错误,这是字符串1';
  7. elseif ($n === 'true') :
  8. $res = '输入错误,这是布尔值1';
  9. else:
  10. $res='这是我管不了的变量';
  11. endif;
  12. return $res;
  13. }
  14. echo demo(1);//输入错误,这是数值1
  15. echo '<br>';
  16. echo demo('1');//输入错误,这是字符串1
  17. echo '<br>';
  18. echo demo('true');//输入错误,这是布尔值1
  19. echo '<br>';
  20. echo demo('3');//这是我管不了的变量;

2.4 switch 分支

使用switch分支写一个计算器

  1. $number1 = $_POST['number1'] ?? 5;
  2. $number2 = $_POST['number2'] ?? 5;
  3. $counter = $_POST['counter'] ?? '+';
  4. switch ($counter) {
  5. case '+':
  6. $sum = $number1 + $number2;
  7. break;
  8. case '-':
  9. $sum = $number1 - $number2;
  10. break;
  11. case '*':
  12. $sum = $number1 * $number2;
  13. break;
  14. case '/':
  15. $sum = $number1 / $number2;
  16. break;
  17. default:
  18. $sum = '参数非法';
  19. }
  20. echo $sum;//10

3 循环结构

3.1 for循环

break:中断循环

  1. for($i=1; $i<=5; $i++) :
  2. if($i==3)
  3. break; //中断循环
  4. echo "{$i}:流程控制<br>";
  5. endfor;
  6. 1:流程控制
  7. 2:流程控制

continue:中断当前循环,进入下一个循环

  1. for($i=1; $i<=5; $i++) :
  2. if($i==3)
  3. continue; //中断循环
  4. echo "{$i}:流程控制<br>";
  5. endfor;
  6. 1:流程控制
  7. 2:流程控制
  8. 4:流程控制
  9. 5:流程控制

break和continue默认中断、跳出1重循环,如果调中断、跳出多重循环,在后面加一个数字。

  1. for ($i = 1; $i <= 5; $i++) : //循环行
  2. for ($j = 1; $j <= $i; $j++) :
  3. if ($i === 3)
  4. break 2; //循环列
  5. echo $j, ' ';
  6. endfor;
  7. echo '<br>';
  8. endfor;
  9. 1
  10. 1 2
  11. for ($i = 1; $i <= 5; $i++) : //循环行
  12. for ($j = 1; $j <= $i; $j++) :
  13. if ($i === 3)
  14. break; //循环列
  15. echo $j, ' ';
  16. endfor;
  17. echo '<br>';
  18. endfor;
  19. 1
  20. 1 2
  21. 1 2 3 4
  22. 1 2 3 4 5
  23. for ($i = 1; $i <= 5; $i++) : //循环行
  24. for ($j = 1; $j <= $i; $j++) :
  25. if ($j === 3)
  26. break; //循环列
  27. echo $j, ' ';
  28. endfor;
  29. echo '<br>';
  30. endfor;
  31. 1
  32. 1 2
  33. 1 2
  34. 1 2
  35. 1 2

do…while()先无条件执行一次

  1. $k = 0;
  2. do {
  3. echo "{$k}:流程控制<br>";
  4. $k++;
  5. } while ($k <= 3);
  6. 0:流程控制
  7. 1:流程控制
  8. 2:流程控制
  9. 3:流程控制
  10. $k = 0;
  11. do {
  12. echo "{$k}:流程控制<br>";
  13. $k++;
  14. } while ($k >= 3);
  15. 0:流程控制

4 综合应用

  1. 99乘法表

    1. echo '<table border="1">';
    2. for($i=1;$i<=9;$i++): //行
    3. echo '<tr>';
    4. for($j=1;$j<=$i;$j++): //列
    5. echo "<td>{$j}*{$i}=".($j*$i).'</td>';
    6. endfor;
    7. echo '</tr>';
    8. endfor;
    9. echo '</table>';
  1. 有100元钱问怎么购买正好可以买100本 10元的大的 5元的 中的 0.5元的小的

    1. for ($i = 1; $i <= 10; $i++) :
    2. for ($j = 1; $j <= 20; $j++) :
    3. for ($k = 1; $k <= 100; $k++) :
    4. if ($i*10 + $j*5 + $k*0.5 == 100&&$i + $j + $k==100)
    5. echo $i.' ', $j.' ', $k, '<br>';
    6. endfor;
    7. endfor;
    8. endfor;

5 总结

分支结构和循环都是为了让逻辑能在代码中表现出来;

为以后的业务逻辑打下基础!

声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议