PHP的流程控制主要分为三大类 分别是 顺序结构 分支结构 循环结构
其中顺序结构就是没有认为控制的流程 根据代码从上往下运行 比较简单
<?php
//一个简单的顺序结构
$a=10;
$b=20;
$c=$a+$b;
?>
分支结构 的特点就是根据条件判断出的不同的结果 进行不同的选择 例如 if-else语句
<?php
//分支结构 简单的if 语句 起一个判断过滤的作用
$age=19;
if($age>18){ //$age>18 条件语句 返回boolean值
echo $age; // 执行语句
}
//分支结构 标准的if语句 必须有一个执行代码块
if($age>18){ //判断条件语句
echo %age; //如果条件为真 执行紧跟if的代码
}else{
echo "年龄不足18岁"; //如果条件为false 执行else后的代码 总会执行一个代码块
}
//分支结构 复杂的if语句 有多个条件语句
if($age>60) //条件语句1 如果为false继续向下
{
echo "老年人";
}else if($age>30&&$age<60){ //条件 语句2 如果为true 执行后面的代码块
echo "中年人";
}else (&age<30){ //前面所有的条件语句都为false时 执行else后面的代码块
echo "成年人"
}
?>
当条件很多并且条件很明确为纯粹的常量时 if-else 就会显得比较臃肿 这里以 输入1-7 输出对应星期几为例
<?php
$a = mt_rand(0,8); //随机产生代表星期几的1-7
switch($a){ //判断条件是个很纯碎的变量 很明确
case 1: //如果变量$a为一 执行case1 后面的代码块
{
echo "星期一";
break; //break的作用是跳出整个循环不再进行case2 如果没有break 会继续向下执行
}
case 2:
{
echo "星期二";
break;
}
case 3:
{
echo "星期三";
break;
}
case 4:
{
echo "星期四";
break;
}
case 5:
{
echo "星期五";
break;
}
case 6:
{
echo "星期六";
break;
}
default: //如果前面的case都没有匹配到变量的值 执行default后面的代码(可省略)
{
echo "星期日";
break;
}
}
?>
if与else 的区别在于 1 if的判断条件可以是表达式 也可以是 变量 而switch的判断条件只能为常量并且通常连续 2 if分支的条件从第一个开始判断 按顺序向下判断 而switch的逻辑不同 直接进入相匹配的case 3 if只能执行一个代码块 而 swirch可以通过不适用break的方式 执行多个代码块
循环结构用来执行循坏代码 以 计算从1到100所有的立方和为例
<?php
$sum =0;
for($a=1;$a<=100;$a++)
{
$sum = $a*$a*$a+$sum;
}
echo $sum;
echo $a; //循环结束后可以在在外部使用别量 值为第一个不满足判断条件的值
/* $a=1 初始化条件 整个循环只执行一次 可以初始化多个变量 用 , 隔开
* $a<=100 判断条件 如果为true 执行循环体 如果不满足 直接跳出循环体
* $a++ 条件变更 循环结构不吃为死循环的关键 通过条件变更 使变量不满足判断条件 跳出循环
* for()内的表达式通过 ; 分开
*/
?>
上面描述的是for循环 在变量规律性不强的情况下 还有一种while循环 本质与for循环没有区别 以从1 加到100为例 :
<?php
$a = 1;
$sum =0;
while($a<=100){ //判断条件
$sum+=$a; //循环体
$a++; //变更语句
}
echo $sum;
?>
本质上与for循环没什么区别 还有一种循环 do..while 无论如何都会被执行一次的时候使用
<?php
do{
循环体(包括变更语句)
}while(判断语句); //()小括号没有结束语句的能力 所以需要在()后面加上 ;
除了上面三种循环 还有一只一种PHP专门针对数组设定的循环结构 foreach 遍历的循环模式
<?php
$arr1 = array('name ' =>'张三' ,'age' => 18 , 'gender' => '男' ); //第二层数组 关联数组
$arr2 = array('name ' =>'李四' ,'age' => 17 , 'gender' => '女' );
$arr3 = array('name ' =>'王五' ,'age' => 19 , 'gender' => '男' );
$info =array($arr1,$arr2,$arr3); //第一层数组 索引数组 必须定义在第二维度数组后面
for ($a=0;$a<3;$a++){ //第一维数组 通常通过索引遍历
foreach ($info[$a] as $key => $value) { //第二层数组 通过foreach遍历 as 不能省略
echo "我的".$key."是".$value."</br>"; //处理便利出来的数据
}
}
?>
循环控制 continue 与 break 两者的区别在于 continue 跳出本次循环 继续下次循环 break是直接终止所有循环 二者后面都可以加上数字 表示跳出循环的层数 一般不会超过3层 continue2; break2;
题目一 保存100个 斐波纳挈数列数组 斐波纳挈数列 ; 第一个和第二个数为1 后面的数字为前面两个数字的和 如 1,1,2,3,,5
<?php
$arr =array();
$arr[0]=1;
$arr[1]=1;
for($a=2;$a<=99;$a++){
$arr[] = $arr[$a-1]+$arr[$a-2];
}
?>
题目二 求出100以内所有的质数(只能被自己和1整除)
<?php
for($a=2;$a<=100;$a++){
for($b=2;$b<$a;$b++){
if($a%$b!=0){
continue;
}else{
break;
}
}
if($a==$b){
echo $a;
}
}
?>
题目三 : 利用for循环,增加一个拥有10个数组元素的二维数组 ,第二维对应的信息是stu_no(学号) stu_age()年龄 stu_name()名字 stu_major()专业 对应的值是学号(no+顺序数值) 年龄(18+顺序数值) 名字 (name+顺序数值) 专业(major+顺序数值) 然后再利用二维数组 输出所有学生的信息
<?php
$ingo = array();
//通过for循环 建立二维数组
for($a=0;$a<=9;$a++){
$arr=array('stu_no'=>'no'.$a,'stu_name'=>'name '.$a,'stu_major'=>'major'.$a);
$info[] = $arr;
}
//第一层数组 通过索引找到对应元素 第二层数组 通过遍历 比哪里出索引与值
for($b=0;$b<=9;$b++){
$arr1=$info[$b];
foreach ($arr1 as $key => $value) {
echo "my".$key."is ".$value."<br/>";
}
}
?>