企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# 流程控制 ## 1. 分支结构 | 序号 | 类型 | 语法 | 模板语法 | | ---- | -------- | ----------------------------------- | ---------------------------------------- | | 1 | 单分支 | `if(){...}` | `if(): ... endif;` | | 2 | 双分支 | `if(){...} else {...}` | `if(): ... else: ... endif;` | | 3 | 多分支 | `if(){...} elseif {...} else {...}` | `if(): ... elseif: ... else: ... endif;` | | 4 | `switch` | `switch() {case: ... break...}` | `switch(): ...endswitch;` | 示例代码: `demo19.php` ```php # 分支结构 // 购买金额 $amount = 5500; // 实际支付 $payment = $amount; // 单分支 if ($amount > 5000) { $payment = $amount * 0.9; } // 模板语法 if ($amount) : $payment = $amount * 0.9; endif; echo '实际支付: ' . $payment . '<br>'; echo '<hr>'; // 双分支 $amount = 3500; if ($amount > 5000) { $payment = $amount * 0.9; } else { $payment = $amount; } // 模板语法 if ($amount > 5000) : $payment = $amount * 0.9; else : $payment = $amount; endif; echo '实际支付: ' . $payment . '<br>'; echo '<hr>'; // 多分支 $amount = 13500; if ($amount > 5000 && $amount < 10000) { $payment = $amount * 0.9; } elseif ($amount >= 10000 && $amount < 20000) { $payment = $amount * 0.7; } elseif ($amount >= 20000 && $amount < 30000) { $payment = $amount * 0.5; } else { $payment = $amount; } // 模板语法 if ($amount > 5000 && $amount < 10000) : $payment = $amount * 0.9; elseif ($amount >= 10000 && $amount < 20000) : $payment = $amount * 0.7; elseif ($amount >= 20000 && $amount < 30000) : $payment = $amount * 0.5; else : $payment = $amount; endif; echo '实际支付: ' . $payment . '<br>'; echo '<hr>'; // switch分支 $amount = 23500; switch (true) { case $amount > 5000 && $amount < 10000: $payment = $amount * 0.9; break; case $amount >= 10000 && $amount < 20000: $payment = $amount * 0.7; break; case $amount >= 20000 && $amount < 30000: $payment = $amount * 0.5; break; default: $payment = $amount; } // 模板语法 $amount = 8500; switch (true): case $amount > 5000 && $amount < 10000: $payment = $amount * 0.9; break; case $amount >= 10000 && $amount < 20000: $payment = $amount * 0.7; break; case $amount >= 20000 && $amount < 30000: $payment = $amount * 0.5; break; default: $payment = $amount; endswitch; echo '实际支付: ' . $payment . '<br>'; // switch最常用的场景是单值判断 // 例如,根据不同折扣输出不同金额 $discount = 0.8; switch ($discount): case 0.9: $payment = $amount * $discount; break; case 0.7: $payment = $amount * 0.7; break; case 0.5: $payment = $amount * 0.5; break; default: die('不支持的折扣率'); endswitch; echo '实际支付: ' . $payment . ', 折扣率: ' . $discount; ``` --- ## 2. 循环结构 | 序号 | 类型 | 语法 | 模板语法 | | ---- | ---------- | ------------------- | ------------------------ | | 1 | 入口判断型 | `while(){...}` | `while(): ... endwhile;` | | 2 | 出口判断型 | `do {...} while();` | `do : ... while();` | | 3 | 计数型 | `for(){...}` | `for () : ... endfor;` | 循环控制关键字: | 序号 | 关键字 | 描述 | | ---- | ---------- | --------------------------- | | 1 | `continue` | 终止本次循环,提前进入下一轮 | | 2 | `break` | 跳出本层循环 | 示例代码: `demo20.php` ```php <?php # 循环结构 $cities = ['武汉', '合肥', '南京', '杭州', '上海']; // 1. 入口判断型 // 只要循环条件为真,则循环执行 // current(): 获取当前数组元素的值, next():移动数组指针指向下一条记录 while ($city = current($cities)) { echo $city . '<br>'; // 更新循环条件: 读到下一个数据 next($cities); } // 数组指针复位,指向第一个元素 reset($cities); // 模板语法 while ($city = current($cities)) : echo $city . '<br>'; // 更新循环条件: 读到下一个数据 next($cities); endwhile; echo '<hr>'; // 2. 出口判断型 reset($cities); // 只要循环条件为真,则循环执行 do { echo $city . '<br>'; // 更新循环条件: 读到下一个数据 next($cities); } while ($city = current($cities)); // 你会发现,第一个城市"武汉"消失了,为什么呢? // 因为出口判断型,无论条件是否满足,循环体总会先执行一遍,next($cities)跳过了第一个元素 // do-while 没有对应的模板语法 echo '<hr>'; // 3. 计数型 reset($cities); // for()循环是while()的聚合版,将循环条件与条件更新全部集成到了参数中 // count(): 获到数组元素数量 for ($i = 0; $i < count($cities); $i++) { echo $cities[$i] . '<br>'; } // 模板语法 reset($cities); for ($i = 0; $i < count($cities); $i++) : echo $cities[$i] . '<br>'; endfor; echo '<hr>'; // 关键字continue: 终止本次循环,提前进入下一轮 // 关键字break: 跳出本层循环 $cities = ['武汉', '合肥', false, '南京', null, '杭州', '上海']; // 其实用while()遍历数组时是有一个bug的,如果数组存在计算结果为false的元素会提前结束循环 while ($city = current($cities)) : echo $city . '<br>'; next($cities); endwhile; // continue: 跳过运算结果为false数据 reset($cities); // 因为while()条件为false时, 不会执行,所以换成for for ($i = 0; $i < count($cities); $i++) : if (!$cities[$i]) continue; echo $cities[$i] . '<br>'; // 如果值为"杭州"跳出循环 if ($cities[$i] === '杭州') break; endfor; ```