您的位置:首页 > 编程语言 > PHP开发

php基础——流程控制

2020-06-29 04:51 621 查看

顺序控制流程

顺序就是自动的,不加任何控制的流程,从上到下执行

分支控制(选择语句)

if else选择

if ( $a  >  $b ) {
echo  "a is bigger than b" ;
} elseif ( $a  ==  $b ) {
echo  "a is equal to b" ;
} else {
echo  "a is smaller than b" ;
}

流程图

switch 语句

  • 当一个 case 语句中的值和 switch 表达式的值匹配时 PHP 才开始执行语句
  • 直到 switch 的程序段结束或者遇到第一个 break 语句为止。如果不在 case 的语句段最后写上 break 的话,PHP 将继续执行下一个 case 中的语句段
  • 一个 case 的特例是 default。它匹配了任何和其它 case 都不匹配的情况
  • case 表达式可以是任何求值为简单类型的表达式,即整型或浮点数以及字符串,甚至可以是运算,是个函数调用
$i = 2;
function test($n1,$n2){
return $n1 + $n2;
}

switch ($i){
case 1:
echo '今天星期一,猴子穿新衣';
break;
case test(1,1):
echo '今天星期二,猴子当小二';
break;
default:
echo '不会编了~';
}

switch测试题

// 不会编了~  今天星期一,猴子穿新衣
// 1. 匹配case1 false  2.匹配case2 false  case都未匹配到 需要找default 3.匹配default true,且无break继续向下打印直到遇到break结束.
$i = 5;

switch ($i){
default:
echo '不会编了~';
//break;
case 1:
echo '今天星期一,猴子穿新衣';
break;
case 2:
echo '今天星期二,猴子当小二';
break;
}

// 今天星期二,猴子当小二
// 1. 匹配case1 false  2.匹配case2 true  break结束
$j = 2;

switch ($j){
default:
echo '不会编了~';
//break;
case 1:
echo '今天星期一,猴子穿新衣';
break;
case 2:
echo '今天星期二,猴子当小二';
break;
}

循环控制

for循环

for ( $i  =  1 ;  $i  <=  10 ;  $i ++) {
echo  $i ;
}

// 其他写法
for ($i = 0;$i<10;){
echo $i;
$i++;
}

$i = 0;
for (;$i<10;){
echo $i;
$i++;
}

while循环

$i = 0;
while ($i<10){
echo $i;
$i++;
}

do…while循环

// do...while 至少执行一次
$i = 0;
do{
echo $i;
$i ++;
}while($i<10);

流程图

流程控制的替代语法

  • PHP 提供了一些流程控制的替代语法,包括
    if
    while
    for
    foreach
    switch
  • 替代语法的基本形式是把左花括号
    {
    换成冒号
    :
    ,把右花括号
    }
    分别换成
    endif;
    endwhile;
    endfor;
    endforeach;
    endswitch;

ifelse比较大小

$a = rand(1,10);
$b = rand(1,10);
include './121.php';

/* html中流程控制语法
<body>
<?php if ($a > $b):?>
<h1>a is bigger than b</h1>
<?php elseif ($a == $b):?>
<h1>a is equal to b</h1>
<?php else:?>
<h1>a is smaller than b</h1>
<?php endif;?>
</body>
*/
*/

foreach打印水浒英雄表格

$arr = array('a'=>array('宋江','男','及时雨'), 'b'=>array('鲁智深','男','花和尚'), 'c'=>array('林冲','男','豹子头'));
include '../html.html';
/*
<table>
<tr>
<th>姓名</th>
<th>性别</th>
<th>外号</th>
</tr>
<?php foreach($arr as $key=>$value):?>
<tr>
<?php foreach($arr[$key] as $v):?>
<td><?php echo $v; ?></td>
<?php endforeach; ?>
</tr>
<?php endforeach; ?>
</table>
*/

break

  • break 结束当前 for,foreach,while,do-while 或者 switch 结构的执行
  • break 可以接受一个可选的数字参数来决定跳出几重循环

break基本用法

$n = 1;
while (1){
$a = rand(1,1000);
if ($a == 99){
echo $n;
break;
}
$n++;
}

break结束第n层循环

// 注意分析执行流程
$i = 0;
while (true){
switch ($i++) {
case 3:
echo 'quit at 3';
break;
case 5:
echo 'quit at 5';
break 2;
default:
break;
}
}
// quit at 3  quit at 5

continue

  • continue 在循环结构用用来跳过本次循环中剩余的代码并在条件求值为真时开始执行下一次循环
  • continue 接受一个可选的数字参数来决定跳过几重循环到循环结尾。默认值是 1,即跳到当前循环末尾

continue基本用法

for ($i=0; $i<2; $i++){
for ($j=0;$j<4;$j++){
if ($j == 2){
continue;
}
echo '$i='.$i.'$j='.$j.'<br>';
}
}

分析图
遇到难的逻辑运算 会画图分析

continue跳出第n层循环

for ($i=0; $i<2; $i++){
for ($j=0;$j<4;$j++){
if ($j == 2){
continue 2;
}
echo '$i='.$i.'$j='.$j.'<br>';
}
}

goto

  • goto 操作符可以用来跳转到程序中的另一位置
  • 该目标位置可以用目标名称加上冒号来标记,而跳转指令是 goto 之后接上目标位置的标记
  • PHP 中的 goto 有一定限制,目标位置只能位于同一个文件和作用域
  • goto无法跳出一个函数或类方法,也无法跳入到另一个函数或任何循环或switch 结构中
  • goto可以跳出循环或者switch,通常的用法是用 goto 代替多层的 break

简单示例

goto  a ;
echo  'Foo' ;	// 这句代码被跳过

a :
echo  'Bar' ;   // Bar

goto 跳出循环示例

for( $i=0, $j=50 ; $i<100 ; $i++) {
while($j--) {
if($j == 17) {
goto end ;  // 当while循环到$j==17时, goto执行直接跳出了for循环
}
}
}
end :
echo "i = $i" ;
echo "j = $j" ;

循环练习题

打印空心金字塔

<?php

/*
▲
▲▲
▲▲▲
*/
for ($i=1; $i<5; $i++){
for ($j = 0;$j < $i;$j++){
echo '▲';
}
echo '<br>';
}

/*
▲       => 第1层 有1  (2*(层数-1)+1)个
▲▲▲     => 第2层 有3  (2*(层数-1)+1)个
▲▲▲▲▲   => 第3层 有5  (2*(层数-1)+1)个
*/
for ($i = 1; $i <= 5; $i++){
for ($j=1; $j<=2*($i-1)+1; $j++){
echo '▲';
}
echo '<br>';
}

/*
▲     => 第1层 有2  (层数-当前层数)个空格
▲▲▲    => 第2层 有1  (层数-当前层数)个空格
▲▲▲▲▲   => 第3层 有0  (层数-当前层数)个空格
*/
$n = 5;
for ($i = 1; $i<=$n; $i++){
// 打印空格
for ($k=1; $k<=$n-$i; $k++){
echo '▼';
}
for ($j=1; $j<=2*($i-1)+1; $j++){
echo '▲';
}
echo '<br>';
}

echo '<hr>';

/*
▲
▲*▲
▲***▲
▲▲▲▲▲▲▲
*/
$n = 5;
for ($i = 1; $i<=$n; $i++){
$num = 1;
for ($k=1; $k<=$n-$i; $k++){
echo '▼';
}
for ($j=1; $j<=2*($i-1)+1; $j++){

if ($i>1 && $i<$n){
if ($num>1 && $num<2*($i-1)+1){
echo '▼';
}else{
echo '▲';
}
}else{
echo '▲';
}
$num++;
}
echo '<br>';
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: