Blogger Information
Blog 55
fans 3
comment 0
visits 54978
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP操作符与流程控制
王佳祥
Original
818 people have browsed it

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;
Correcting teacher:GuanhuiGuanhui

Correction status:qualified

Teacher's comments:完成的很好!有码有图。
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post