博客列表 >PHP操作符与流程控制

PHP操作符与流程控制

王佳祥
王佳祥原创
2020年07月07日 12:01:44792浏览

PHP操作符与流程控制

一、操作符

  1. <?php
  2. //比较运算符返回布尔值
  3. var_dump(10 > 20);
  4. // “==”,“===”
  5. //“==”:值比较,当操作符两边的操作类型不一致,会触发类型自动转换机制
  6. var_dump(100 == '100');
  7. //"===":除了值相等,类型也必须一致
  8. echo '<hr>';
  9. var_dump(100 === '100');
  10. echo '<hr>';
  11. //太空船运算符
  12. var_dump(10 <=> 20);//返回-1
  13. var_dump(10 <=> 5);//返回1
  14. var_dump(10 <=> 10);//返回0
  15. //大于返回1,小于返回-1,相等返回0
  16. echo '<hr>';
  17. //逻辑运算符
  18. //&&: 两边表达式除非全部为true,否则返回false
  19. var_dump((10>20)&&(5>8));
  20. echo '<hr>';
  21. // ||:两边表达式一个为true,全部为true
  22. var_dump((10<20)||(5>8));
  23. echo '<hr>';
  24. //三元运算符
  25. //三元:三个表达式
  26. //二元:二个表达式
  27. $price = 1000;
  28. echo $price > 1500 ? '太贵了' : '太便宜了';
  29. echo '<hr>';
  30. // ??:null合并运算符
  31. echo $password ?? 'root';

二、分支控制与模板语法

  1. <?php
  2. //计算机默认是顺序执行
  3. //分支结构
  4. //1.单分支
  5. $amount = 5500;
  6. $payment = $amount;
  7. /* if ($amount >= 4000){
  8. $payment = $amount * 0.9;
  9. } */
  10. if ($amount >= 5000) $payment = $amount*0.9;
  11. //当流程控制语句中只有一行代码的时候,可以省略大括号
  12. echo '(省略大括号)实际支付:',$payment,'元<hr>';
  13. //模板语法:
  14. if ($amount >= 4000):
  15. $payment = $amount * 0.9;
  16. endif;
  17. /*
  18. 模板语法:就是去掉流程控制中的大括号
  19. 将起始大括号用冒号代替,将结束大括号用特殊关键字代替
  20. */
  21. echo '(模板语法)实际支付:',$payment,'元<hr>';
  22. //2.双分支
  23. $amount = 4500;
  24. if ($amount >=5000){
  25. $payment = $amount *0.9;
  26. }else{
  27. $payment = $amount;
  28. }
  29. echo '(双分支)实际支付:',$payment,'元<hr>';
  30. //模板语法:
  31. $amount = 10000;
  32. if ($amount >=5000):
  33. $payment = $amount *0.9;
  34. else:
  35. $payment = $amount;
  36. endif;
  37. echo '(双分支模板语法)实际支付:',$payment,'元<hr>';
  38. //3.多分支
  39. if ($amount > 5000 && $amount < 10000){
  40. $payment = $amount *0.9;
  41. }elseif($amount >= 10000 && $amount < 20000){
  42. $payment = $amount *0.7;
  43. }elseif($amount >= 20000){
  44. $payment = $amount *0.5;
  45. }else{
  46. $payment = $amount;
  47. }
  48. echo '(多分支)实际支付:',$payment,'元<hr>';
  49. //模板语法:
  50. if ($amount > 5000 && $amount < 10000):
  51. $payment = $amount *0.9;
  52. elseif($amount >= 10000 && $amount < 20000):
  53. $payment = $amount *0.7;
  54. elseif($amount >= 20000):
  55. $payment = $amount *0.5;
  56. else:
  57. $payment = $amount;
  58. endif;
  59. echo '(多分支模板语法)实际支付:',$payment,'元<hr>';
  60. // 4.switch:用来简化多分支
  61. //switch:通常用在单值判断中
  62. $amount = 20000;
  63. switch(true){
  64. case $amount > 5000 && $amount < 10000:
  65. $payment = $amount *0.9;
  66. break;
  67. case $amount >= 10000 && $amount < 20000:
  68. $payment = $amount *0.7;
  69. break;
  70. case $amount >= 20000:
  71. $payment = $amount *0.5;
  72. break;
  73. //默认分支
  74. default:
  75. $payment = $amount;
  76. }
  77. echo '(switch)实际支付:',$payment,'元<hr>';
  78. //模板语法:
  79. $amount = 15000;
  80. switch(true):
  81. case $amount > 5000 && $amount < 10000:
  82. $payment = $amount *0.9;
  83. break;
  84. case $amount >= 10000 && $amount < 20000:
  85. $payment = $amount *0.7;
  86. break;
  87. case $amount >= 20000:
  88. $payment = $amount *0.5;
  89. break;
  90. //默认分支
  91. default:
  92. $payment = $amount;
  93. endswitch;
  94. echo '(switch模板语法)实际支付:',$payment,'元<hr>';


三、循环控制与模板语法

1.判断型循环

  1. <?php
  2. $cities = ['合肥','南京','杭州','苏州','上海'];
  3. //判断型循环:入口判断型 while(条件){...}
  4. //判断当前数组元素的值
  5. //current() 函数返回当前被内部指针指向的数组单元的值,并不移动指针。
  6. //如果内部指针指向超出了单元列表的末端,current() 返回 FALSE。
  7. while ($city = current($cities)){
  8. echo $city,'<br>';
  9. next($cities);//指针下移
  10. }
  11. echo '<hr>';
  12. //指针复位
  13. reset ($cities);
  14. echo '指针复位<br>';
  15. while ($city = current($cities)){
  16. echo $city,'<br>';
  17. next($cities);//指针下移
  18. }
  19. //模板语法:
  20. echo '<hr>';
  21. echo '模板语法<br>';
  22. reset ($cities);
  23. while ($city = current($cities)):
  24. echo $city,'<br>';
  25. next($cities);//指针下移
  26. endwhile;
  27. reset ($cities);
  28. echo '<hr>';
  29. echo 'do{}while();没有模板语法';
  30. //出口判断型: do{...} while(条件)
  31. do {
  32. echo $city,'<br>';
  33. next($cities);//指针下移
  34. }while($city = current($cities));


2.for遍历数组

  1. <?php
  2. $cities = ['山西','河南','山东','河北','湖南'];
  3. //遍历数组
  4. echo '<hr>for遍历数组<br>';
  5. //echo count($cities);//统计数组元素个数
  6. //$i:数组元素的索引,默认从0开始
  7. for($i = 0;$i < count($cities);$i++){
  8. echo $cities[$i],'<br>';
  9. }
  10. //$i:数组元素的索引,默认从0开始
  11. //模板语法
  12. echo '<hr>for模板语法<br>';
  13. for($i = 0;$i < count($cities);$i++):
  14. echo $cities[$i],'<br>';
  15. endfor;
  16. //关键字输出拦截break
  17. echo '<hr>break拦截输出<br>';
  18. for($i = 0;$i < count($cities);$i++):
  19. if($i > 2) break;
  20. echo $cities[$i],'<br>';
  21. endfor;
  22. //continue有选择的输出
  23. echo '<hr>continue有选择的输出<br>';
  24. for($i = 0;$i < count($cities);$i++):
  25. if($i === 3)continue;
  26. echo $cities[$i],'<br>';
  27. endfor;


3.用表格来输出二维数组

  1. <?php
  2. //数据表查询结果通常是一个二维数组,用二维数组来模拟
  3. //php可以写在HTML中的任何地方
  4. $users = [
  5. ['id'=>1,'name'=>'张三','age'=>20],
  6. ['id'=>2,'name'=>'王红','age'=>22],
  7. ['id'=>3,'name'=>'李丽','age'=>21],
  8. ['id'=>4,'name'=>'刘帅','age'=>22],
  9. ];
  10. ?>
  11. <!DOCTYPE html>
  12. <html lang="en">
  13. <head>
  14. <meta charset="UTF-8">
  15. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  16. <title>Document</title>
  17. </head>
  18. <body>
  19. <?php
  20. $table = '<table border="1" cellspacing="0" cellpadding="0" width="600px">';
  21. for ($i =0; $i < count($users);$i++){
  22. $table .= '<tr>';
  23. $table .= '<td>'.$users[$i]['id'].'</td>';
  24. $table .= '<td>'.$users[$i]['name'].'</td>';
  25. $table .= '<td>'.$users[$i]['age'].'</td>';
  26. $table .= '</tr>';
  27. }
  28. $table .= '</table>';
  29. echo $table.'<hr>';
  30. ?>
  31. <table cellspacing="0" cellpadding="0" width="600px">
  32. <?php for ($i =0; $i < count($users);$i++): ?>
  33. <tr>
  34. <td><?php $users[$i]['id'] ?></td>
  35. <td><?php $users[$i]['name'] ?></td>
  36. <td><?php $users[$i]['age'] ?></td>
  37. </tr>
  38. <?php endfor; echo $table;?>
  39. </table>
  40. </body>
  41. </html>


学习总结

1.操作符

  • 算术运算符:
例子 名称 结果
-$a 取反 $a 的负值
$a + $b 加法 $a 和 $b 的和
$a - $b 减法 $a 和 $b 的差
$a * $b 乘法 $a 和 $b 的积
$a / $b 除法 $a 除以 $b 的商
$a % $b 取模 $a 除以 $b 的余数
  • 赋值运算符:

    基本的赋值运算符是”=”。一开始可能会以为它是”等于”,其实不是的。它实际上意味着把右边表达式的值赋给左边的运算数。

  • 位运算符 :
例子 名称 结果
$a & $b And(按位与) 将把 $a 和 $b 中都为 1 的位设为 1。
$a | $b Or(按位或) 将把 $a 和 $b 中任何一个为 1 的位设为 1。
$a ^ $b Xor(按位异或) 将把 $a 和 $b 中一个为 1 另一个为 0 的位设为 1。
~ $a Not(按位取反) 将 $a 中为 0 的位设为 1,反之亦然。
  • 比较运算符 :
例子 名称 结果
$a == $b 等于 TRUE,如果类型转换后 $a 等于 $b。
$a === $b 全等 TRUE,如果 $a 等于 $b,并且它们的类型也相同。
$a != $b 不等 TRUE,如果类型转换后 $a 不等于 $b。
$a <> $b 不等 TRUE,如果类型转换后 $a 不等于 $b。
$a !== $b 不全等 TRUE,如果 $a 不等于 $b,或者它们的类型不同。
$a < $b 小与 TRUE,如果 $a 严格小于 $b。
$a > $b 大于 TRUE,如果 $a 严格大于 $b。
$a <= $b 小于等于 TRUE,如果 $a 小于或者等于 $b。
$a >= $b 大于等于 TRUE,如果 $a 大于或者等于 $b。
$a <=> $b 太空船运算符(组合比较符) 当$a小于、等于、大于$b时分别返回一个小于、等于、大于0的integer 值。 PHP7开始提供.
$a ?? $b ?? $c NULL 合并操作符 从左往右第一个存在且不为 NULL 的操作数。如果都没有定义且不为 NULL,则返回 NULL。
  • 递增/递减运算符 :
例子 名称 效果
++$a 前加 $a 的值加一,然后返回 $a。
$a++ 后加 返回 $a,然后将 $a 的值加一。
—$a 前减 $a 的值减一, 然后返回 $a。
$a— 后减 返回 $a,然后将 $a 的值减一。
  • 逻辑运算符 :
例子 名称 效果
$a and $b And(逻辑与) TRUE,如果 $a 和 $b 都为 TRUE。
$a or $b Or(逻辑或) TRUE,如果 $a 或 $b 任一为 TRUE。
$a xor $b Xor(逻辑异或) TRUE,如果 $a 或 $b 任一为 TRUE,但不同时是。
! $a Not(逻辑非) TRUE,如果 $a 不为 TRUE。
$a && $b And(逻辑与) TRUE,如果 $a 和 $b 都为 TRUE。
$a || $b Or(逻辑或) TRUE,如果 $a 或 $b 任一为 TRUE。

2.分支控制

  • if单分支
  1. if(条件){
  2. 输出结果
  3. }
  4. 单分支可以省略大括号
  5. if(条件)输出结果;
  6. 模板语法:
  7. if(条件):输出结果; endif;
  • if双分支
  1. if(条件){
  2. 输出结果
  3. }else{
  4. 输出结果
  5. }
  6. 模板语法:
  7. if(条件):
  8. 输出结果
  9. else:
  10. 输出结果
  11. endif;
  • if多分支
  1. if(条件){
  2. 输出结果
  3. }elseif{
  4. 输出结果
  5. }elseif{
  6. 输出结果
  7. }else{
  8. 输出结果
  9. }
  10. 模板语法:
  11. if(条件):
  12. 输出结果
  13. elseif:
  14. 输出结果
  15. elseif:
  16. 输出结果
  17. else:
  18. 输出结果
  19. endif;
  • switch 判断单值
  1. switch(true){
  2. case (条件):
  3. 输出结果;
  4. break;
  5. case (条件):
  6. 输出结果;
  7. break;
  8. case (条件):
  9. 输出结果;
  10. break;
  11. default:
  12. 输出结果;
  13. }
  14. 模板语法:
  15. switch(true):
  16. case (条件):
  17. 输出结果;
  18. break;
  19. case (条件):
  20. 输出结果;
  21. break;
  22. case (条件):
  23. 输出结果;
  24. break;
  25. default:
  26. 输出结果;
  27. endswitch;

3、判断循环和数组遍历

  • while 入口判断循环
  1. 变量 = ['a','n','b'];
  2. while(变量 = current(变量)){
  3. //current() 函数返回当前被内部指针指向的数组单元的值,并不移动指针
  4. 条件为真时执行结果
  5. next(变量);//指针下移
  6. }
  7. 模板语法:
  8. while(变量 = current(变量)):
  9. //current() 函数返回当前被内部指针指向的数组单元的值,并不移动指针
  10. 条件为真时执行结果
  11. next(变量);//指针下移
  12. endwhile;
  • do while 出口判断循环
  1. 变量 = ['a','n','b'];
  2. do{
  3. //直接输出结果
  4. next(变量);//指针下移
  5. }while(变量 = current(变量));
  6. do while没有模板语法
  • for遍历数组
  1. $array=['a','b','c'];
  2. for($i = 0;$i < count($array);$i++){
  3. echo '输出结果$array[$i]';
  4. }
  5. 模板语法:
  6. $array=['a','b','c'];
  7. for($i = 0;$i < count($array);$i++):
  8. echo '输出结果$array[$i]';
  9. endfor;
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议