1.顺序结构
demo:
<?php
$shoesPrice = 49; //鞋子单价
$shoesNum = 1; //鞋子数量
$shoesMoney = $shoesPrice * $shoesNum;
$shirtPrice = 99; //衬衣单价
$shirtNum = 2; //衬衣数量
$shirtMoney = $shirtPrice * $shirtNum;
$orderMoney = $shoesMoney + $shirtMoney;
echo $orderMoney ;
?>
输出
···
247
···
2.条件结构
2.1 if...else...
语法:
<?php
if(条件){
//分配服务器干的任务A
}else{
//分配服务器干的任务B
}
?>
demo:
一些酒店为了促销,吸引顾客,可以给当天生日的人八折优惠:
<?php
date_default_timezone_set('Asia/ShangHai');
$today = date('m-d',time());//获取当天日期
$birthday = "02-14";//生日
$money = 238;//消费金额
$discount = 0.8;//八折优惠
if($today == $birthday){
$money = $money * $discount;
}else{
$money = $money * 1;
}
echo $money;
?>
2.2 if…else if…
语法:
<?php
if(条件一){
//分配服务器干的任务A
}else if(条件二){
//分配服务器干的任务B
}
?>
demo:
在妇女节那个月,需要给女员工发300元奖金:
<?php
$totalMoney = 0;//总工资
$basicMoney = 2000;//基本工资
$sex = "女";
if($sex == "男"){
$totalMoney = $basicMoney + 0;// 男的没奖金
}else if($sex == "女"){
$totalMoney = $basicMoney + 300;// 女的有奖金300元
}
echo $totalMoney;
?>
2.3 if…else if…else…
语法:
<?php
if(条件一){
//分配服务器干的任务A
}else if(条件二){
//分配服务器干的任务B
}else{
//分配服务器干的任务C
}
?>
demo:
如果我们需要提供上课的提示信息,假设如果为周一则上午有课,如果为周三则下午有课,其它时间没课。
<?php
date_default_timezone_set('asia/shanghai');
$week = date("w");//获取当天星期几
$info = "";//提示信息
if($week == 1){
$info = "上午有课";
}else if($week == 3){
$info = "下午有课";
}else{
$info = "今天没课";
}
echo $info; //输出提示信息
?>
2.4 switch…case…
语法:
<?php
switch (条件)
{
case 条件值一:
//任务一
break;
case 条件值二:
//任务二
break;
default:
//默认任务
}
?>
demo:
一个玩具中奖程序:
<?php
$num = rand(1,50);//获取1至50的随机数
$info = "";//提示信息
switch($num){
case 1:
$info = "恭喜你!中了一等奖!";
break;
case 2:
$info = "恭喜你!中了二等奖!";
break;
case 3:
$info = "恭喜你!中了三等奖!";
break;
default:
$info = "很遗憾!你没有中奖!";
}
echo $info; //输出是否中奖
?>
3. 循环结构
3.1 while循环语句
语法:
<?php
while(条件){
//执行任务
}
?>
demo:
虚拟宠物:当小宠物饿了,就需要喂食。假设初始化小宠物饿的时候,体力数字为12,当达到100的时候就饱了,我们使用随机数,模拟喂食小宠物小面包恢复的体力值;
<?php
$sum = 12;//小宠物当前的饥饿程度
echo "我饿啦:-(";
echo "<br />";
while($sum<100)
{//小宠物的饥饿程度到100,表示小宠物吃饱啦,不用继续喂了,没吃饱继续喂食
$num = rand(1,20);//随机数,模拟喂食小宠物的小面包
$sum = $sum + $num; //小宠物吃小面包
echo "我还没吃饱呢!";
echo "<br />";
}
echo "终于吃饱啦^_^";
?>
运行效果:
我饿啦:-(
我还没吃饱呢!
我还没吃饱呢!
我还没吃饱呢!
我还没吃饱呢!
我还没吃饱呢!
我还没吃饱呢!
我还没吃饱呢!
我还没吃饱呢!
我还没吃饱呢!
终于吃饱啦^_^
3.2 do while循环语句
语法:
<?php
do{
//执行任务
}while(条件)
?>
demo:
胖虎在跑步锻炼身体,需要跑十圈,要求每跑一圈打印一下:
<?php
$i = 1 ; //从第1圈开始跑
do{ //跑10圈
echo "在跑第".$i."圈。";
echo "<br />";
$i++;
}while($i<=10);
?>
运行结果:
在跑第1圈。
在跑第2圈。
在跑第3圈。
在跑第4圈。
在跑第5圈。
在跑第6圈。
在跑第7圈。
在跑第8圈。
在跑第9圈。
在跑第10圈。
3.3 while
与do…while
语句的区别
-
while
先判断条件是否成立,后执行循环,
do...while
先执行一次任务,再判断是否继续执行循环,也就是说do...while
至少会执行一次任务。 - 当条件为FALSE时,
while
中的任务会一次也不执行,do...while
中的任务会执行1次。
demo:
<?php
//A例子
$num = 2;
$sum = 10;
while($num>3){
$sum = $sum + 10;
}
echo "A例子的结果:".$sum."<br />";
//B例子
$num = 2;
$sum = 10;
do{
$sum = $sum + 10;
}while($num>3);
echo "B例子的结果:".$sum."<br />";
?>
运行结果:
A例子的结果:10
B例子的结果:20
3.4 do…while语句的运用优势举例
假设有一种棋类游戏,首先掷骰子,若不为6,前进骰子的点数的步长;若为6,前进骰子的点数的步长,并可以再掷一次。写一段脚本,完成一次抛骰子的运算:
<?php
//while例子
$sum = 0;
$num = rand(1,6); //获取1至6的随机数,模拟掷骰子
$sum = $sum + $num;//前进步长
while($num==6){
$num = rand(1,6);//获取1至6的随机数,模拟掷骰子
$sum = $sum + $num;//前进步长
};
echo "while例子执行完毕,前进:".$sum ."<br />";
//do...while例子
$sum = 0;
do{
$num = rand(1,6);//获取1至6的随机数,模拟掷骰子
$sum = $sum + $num;//前进步长
}while($num==6);
echo "do...while例子执行完毕,前进:".$sum ."<br />";
?>
从代码的结构和可读性角度来看,在这里使用do...while
更合适。
3.5 for循环语句
语法:
<?php
for(初始化;循环条件;递增项){
//执行任务
}
?>
demo:
累积求和1-100:
<?php
//for语句写法
for($i = 1,$sum = 0;$i<=100;$i++){
$sum = $sum + $i; // 累加求和
}
echo "for语句的运行结果:".$sum."<br />" ;
//while语句写法
$i = 1 ; // 从1开始累加
$sum = 0; //初始化和为0
while($i<=100){ //判断是否小于100
$sum = $sum + $i; // 累加求和
$i++; //递增1
}
echo "while语句的运行结果:".$sum."<br />" ;
?>
3.6 foreach循环语句
语法:
在PHP中foreach循环语句,常用于遍历数组,
一般有两种使用方式:不取下标、取下标
。
(1)只取值,不取下标
<?php
foreach (数组 as 值){
//执行的任务
}
?>
(2)同时取下标和值
<?php
foreach (数组 as 下标 => 值){
//执行的任务
}
?>
这里跟Java语法有区别:
foreach (值 : 数组){ //执行的任务 }
demo:
//foreach循环 for(String str : arr){ //这里的str就是为了获取每次循环的arr中的值 System.out.println(str); //就相当于 String str=arr[i] }
php-demo:
<?php
$students = array(
'2010'=>'令狐冲',
'2011'=>'林平之',
'2012'=>'曲洋',
'2013'=>'任盈盈',
'2014'=>'向问天',
'2015'=>'任我行',
'2016'=>'冲虚',
'2017'=>'方正',
'2018'=>'岳不群',
'2019'=>'宁中则',
);//10个学生的学号和姓名,用数组存储
//使用循环结构遍历数组,获取学号和姓名
echo "只取值,不取下标的打印:";
echo "<br />"."<br />";
foreach($students as $v)
{
echo $v;//输出(打印)姓名
echo "<br />";
}
echo "<br />"."--------------"."<br />"."<br />";
echo "同时取下标和值的打印:";
echo "<br />"."<br />";
foreach($students as $key => $value)
{
echo '这是键为 '.$key.' 对应的值:'.$value;
echo "<br />";
}
?>
运行结果:
只取值,不取下标的打印:
令狐冲
林平之
曲洋
任盈盈
向问天
任我行
冲虚
方正
岳不群
宁中则
--------------
同时取下标和值的打印:
这是键为 2010 对应的值:令狐冲
这是键为 2011 对应的值:林平之
这是键为 2012 对应的值:曲洋
这是键为 2013 对应的值:任盈盈
这是键为 2014 对应的值:向问天
这是键为 2015 对应的值:任我行
这是键为 2016 对应的值:冲虚
这是键为 2017 对应的值:方正
这是键为 2018 对应的值:岳不群
这是键为 2019 对应的值:宁中则