流程控制的深入
1 运算符
1.1 三元运算符 ?:简化双分支
$a=isset($a)?$a:$a='root';
echo $a;//root
1.2 ?? 设置默认值
$a = $a ?? 333;
echo $a . '<br>';//333
$b ?? $b = 444;
echo $b . '<br>';//444
$c ?? $d = 555;
echo $d . '<br>';//555
$a1 ?? 666;
echo $a1.'<br>';//报错未定义
echo $a2 ?? 777;
echo '<br>';//777
小结:
?? 是对 isset()双分支的三元运算 ?: 的进一步缩写 使代码更加简洁;
$a=isset($a)?$a:'root';
//等同于
$a=$a??'root';
2 分支结构
2.1 单分支
使用单分支判断用户名是否为空
$name = $_POST['username'] ?? null;
if ($name===null) :
$arr = ['code' => 1, 'msg' => '用户名为空', 'data' => ''];
var_dump(json_encode($arr, JSON_UNESCAPED_UNICODE));
endif;
//string(44) "{"code":1,"msg":"用户名为空","data":""}"
2.2 双分支
使用双分支判断$n的值范围进行加或者减
function demo($n){
$n>10?--$n:$n++;
return $n;
}
echo demo(8);//9
echo '<br>';
echo demo(18);//17
2.3 多分支
使用多分支判断否是是自己想要的结果
function demo($n)
{
if ($n === 1) :
$res = '输入错误,这是数值1';
elseif ($n === '1') :
$res = '输入错误,这是字符串1';
elseif ($n === 'true') :
$res = '输入错误,这是布尔值1';
else:
$res='这是我管不了的变量';
endif;
return $res;
}
echo demo(1);//输入错误,这是数值1
echo '<br>';
echo demo('1');//输入错误,这是字符串1
echo '<br>';
echo demo('true');//输入错误,这是布尔值1
echo '<br>';
echo demo('3');//这是我管不了的变量;
2.4 switch 分支
使用switch分支写一个计算器
$number1 = $_POST['number1'] ?? 5;
$number2 = $_POST['number2'] ?? 5;
$counter = $_POST['counter'] ?? '+';
switch ($counter) {
case '+':
$sum = $number1 + $number2;
break;
case '-':
$sum = $number1 - $number2;
break;
case '*':
$sum = $number1 * $number2;
break;
case '/':
$sum = $number1 / $number2;
break;
default:
$sum = '参数非法';
}
echo $sum;//10
3 循环结构
3.1 for循环
break:中断循环
for($i=1; $i<=5; $i++) :
if($i==3)
break; //中断循环
echo "{$i}:流程控制<br>";
endfor;
1:流程控制
2:流程控制
continue:中断当前循环,进入下一个循环
for($i=1; $i<=5; $i++) :
if($i==3)
continue; //中断循环
echo "{$i}:流程控制<br>";
endfor;
1:流程控制
2:流程控制
4:流程控制
5:流程控制
break和continue默认中断、跳出1重循环,如果调中断、跳出多重循环,在后面加一个数字。
for ($i = 1; $i <= 5; $i++) : //循环行
for ($j = 1; $j <= $i; $j++) :
if ($i === 3)
break 2; //循环列
echo $j, ' ';
endfor;
echo '<br>';
endfor;
1
1 2
for ($i = 1; $i <= 5; $i++) : //循环行
for ($j = 1; $j <= $i; $j++) :
if ($i === 3)
break; //循环列
echo $j, ' ';
endfor;
echo '<br>';
endfor;
1
1 2
1 2 3 4
1 2 3 4 5
for ($i = 1; $i <= 5; $i++) : //循环行
for ($j = 1; $j <= $i; $j++) :
if ($j === 3)
break; //循环列
echo $j, ' ';
endfor;
echo '<br>';
endfor;
1
1 2
1 2
1 2
1 2
do…while()先无条件执行一次
$k = 0;
do {
echo "{$k}:流程控制<br>";
$k++;
} while ($k <= 3);
0:流程控制
1:流程控制
2:流程控制
3:流程控制
$k = 0;
do {
echo "{$k}:流程控制<br>";
$k++;
} while ($k >= 3);
0:流程控制
4 综合应用
99乘法表
echo '<table border="1">';
for($i=1;$i<=9;$i++): //行
echo '<tr>';
for($j=1;$j<=$i;$j++): //列
echo "<td>{$j}*{$i}=".($j*$i).'</td>';
endfor;
echo '</tr>';
endfor;
echo '</table>';
有100元钱问怎么购买正好可以买100本 10元的大的 5元的 中的 0.5元的小的
for ($i = 1; $i <= 10; $i++) :
for ($j = 1; $j <= 20; $j++) :
for ($k = 1; $k <= 100; $k++) :
if ($i*10 + $j*5 + $k*0.5 == 100&&$i + $j + $k==100)
echo $i.' ', $j.' ', $k, '<br>';
endfor;
endfor;
endfor;
5 总结
分支结构和循环都是为了让逻辑能在代码中表现出来;
为以后的业务逻辑打下基础!