PHP学习 Day_05


if语句

  • 格式
if (条件){
  [语句序列;]
  []
}

如果条件成立(非0,非空,非null,非false,非空字符串),则执行语句序列,否则不执行语句序列。

<?php
//使用utf-8编码,不然可能会出现乱码
header("Content-Type:text/html;charset=utf-8");
# 条件5>6不成立,所以不输出
if (5>6)
    echo "111<br/>";
# 条件变量a的值等于3成立,所以输出
$a=3;
if ($a==3)
    echo "222<br/>";
# 条件将4赋值给a,非0,条件成立,所以输出
if ($a=4)
    echo "333<br/>";
# 条件0等于false值成立,所以输出
if (0==false){
    echo "444<br/>";
    echo "555<br/>";
}
# 条件变量a的值等于3,不成立,所以不输出
if ($a==3)
    echo "aaa";
# 条件0与false类型数值均相等不成立,所以不输出
if (0===false)
    echo "666<br/>";
# 无论条件是否成立,均执行echo语句
if (5==6);
echo "777<br/>";
?>
  • if语句中,当输出语句是两个或两个以上时,需要使用{}将输出语句包裹。
  • if语句后有分号,则无论条件是否成立都执行空语句,后面的echo语句是否执行与if语句是否成立无关

运行结果:

222
333
444
555
777

if…else语句

  • 格式
if (条件){
  [语句序列1;]
  []
}
else {
	[语句序列2;]
	[]
}

如果条件成立,则执行语句序列1,否则执行语句序列2。

<?php

$a=5;
$b=15;
# $a大于$b不成立,输出$b
if ($a>$b)
    $max=$a;
else
    $max=$b;
echo $max."<br/>";
# 与上述相同
if ($a>$b)
    ;
else{
    $max=$b;
    echo $max;
}
?>
  • 第一个代码, a a如果大于 b则 m a x max等于 a,否则等于 b b,输出 max
  • 第二个代码, a a如果大于 b则执行空语句,否则 m a x max等于 b,输出$b
  • 注意!当if、else后有两个或两个以上的语句需要使用{}将语句包裹

运行结果:

15
15

if语句的嵌套

  • if语句嵌套即在if语句和if…else语句中的语句序列可以是另一个if语句或if…else语句
  • if语句的嵌套中,else采取就近依靠原则,属于最近的且没有else的if语句
  • 可以通过加{}的方式来改变else的归属

<?php

$a=5;
$b=15;

if ($a==5)
    if ($b==6)
        echo "111<br/>";
    else
        echo "222<br/>";
else
    echo "333<br/>";
?>
  • 首先第一个if语句判断$a的值是否等于5,成立则判断第二个if语句是否成立,否则输出333
  • 第二个if语句成立则输出111,否则输出222
  • 第一个else属于第二个if语句,第二个else语句因为就近的if已经有了归属的else,所以第二个else属于第一个if语句

运行结果:

222

<?php

$a=5;
$b=15;

if ($a==5){
    if ($b==6)
        echo "111<br/>";
}
    else
        echo "222<br/>";
else
    echo "333<br/>";
?>
  • 使用{}改变else归属,第一个else则属于第一个if语句,第二个else因为没有归属的if语句,所以会报错。

<?php
//使用utf-8编码,不然可能会出现乱码
header("Content-Type:text/html;charset=utf-8");

$a=80;
if ($a>=90)
    echo "优秀!";
else if ($a>=80)
    echo "良好!";
elseif ($a>=60)
    echo "及格!";
else
    echo "不及格!";
?>
  • else if中间可以加空格,可以不加
  • 判断条件满足一个之后就不在继续向后执行其他判断语句
  • elseif ($a>=60)这个语句中,它成立的前提条件是 a > = 90 a>=9 0不成立,且 a>=80也不成立

运行结果:

良好!

:if语句的短路运算

<?php

$a=5;
$b=15;
# 先将25赋值给变量a,条件成立,因为是或运算,所以不再执行后面的赋值语句
if (($a=25)||($b=55)){
    echo "I'm Bad!<br/>";
}
# 输出变量a的值为25,b的值为15
echo '$a:'.$a."<br/>";
echo '$b:'.$b."<br/>";
?>

运行结果:

I'm Bad!
$a:25
$b:15

switch语句

  • 格式
switch (表达式){
	case 选项1:
		语句1;break;
	case 选项2:
		语句2;break;default:语句n+1;break;
}
  • 把表达式的值与多个不同选项的值进行比较,来决定执行那些代码。即表达式的值与选项的值相等,则执行其后的的语句,直到遇到break为止
  • 当表达式的值与任何一项的值都不相等,则执行default后的语句

<?php

$a=3;
switch ($a){
    case 1:
        echo "111";break;
    case 2:
        echo "222";break;
    case 3:
    case 4:
        echo "3344";
    case 5:
        echo "555";break;
    case 6:
        echo "666";break;
    default:
        echo "I'm Bad!";
}
?>
  • 变量a的值为3,满足case 3,又因为之后没有语句和break,则继续向后执行,直到遇到breakswitch语句结束

运行结果:

3344555

判断某年月有多少天

  1. 每年的1、3、5、7、8、10、12都是31天
  2. 每年的4、6、9、11都是30天
  3. 闰年的2月是29天,平年的2月是28天
  • 闰年的条件:
    • 年号能被整除
    • 年号能被4整除,但不能被100整除
<?php
//使用utf-8编码,不然可能会出现乱码
header("Content-Type:text/html;charset=utf-8");

$year=2012;$month=2;
switch($month){
    case 1:
    case 3:
    case 5:
    case 7:
    case 8:
    case 10:
    case 12:
        $days=31;break;
    case 4:
    case 6:
    case 9:
    case 11:$days=30;break;
    case 2:
        if (($year % 400==0)||($year % 4==0) && ($year % 100<>0))
            $days=29;
        else
            $days=28;
            break;
    default:
        $days=-1;break;
}

echo "{$year}{$month}月有{$days}天";
?>
  • &&的优先级比||优先级高,所以先运算&&||两边的表达式有一个成立则变量days为29,否则为28
  • $year % 100<>0表示变量year不能被100整除

运行结果:

2012年2月有29天

判断分数对应的等次

  • 分数大于或等于90为优秀,分数在70到80之间为良好,分数在60到70之间为及格,分数小于60分为不及格!
<?php
//使用utf-8编码,不然可能会出现乱码
header("Content-Type:text/html;charset=utf-8");

$score=101;
if ($score>100)
    $grade="请输入100以内的成绩!";
else {
# int为取整
    $a = (int)($score / 10);
    switch ($a) {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            $grade = "不及格!";
            break;
        case 6:
        case 7:
            $grade = "及格!";
            break;
        case 8:
            $grade = "良好!";
            break;
        case 9:
        case 10:
            $grade = "优秀!";
            break;
        default:
            $grade = "分数错误!";
    }
}
echo $grade;
?>

判断某年月日时这年的第几天

  • 在文本域中输入年月日,用逗号隔开。输出这是$year$month$days日。

  • $days包括:

    • $day
    • 从第一个月到$month-1月的月份天数之和

    提示:使用累加方法将一月到 m o n t h month月 day日的天数相加

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>

<body>
<form id="form1" name="form1" method="post" action="">
    输入年月日
    <label for="textfield"></label>
    <input type="text" name="textfield" id="textfield" />
    <input type="submit" name="button" id="button" value="提交" />
</form>
</body>
</html>
# 以上内容是HTML添加文本框的代码,可以直接复制使用

# 以下为PHP代码
<?php
# 调用文本域内输入的数值
if (isset($_POST['button'])) {
    list($year, $month, $day) = explode(",", $_POST['textfield']);

//echo $year."----".$month."----".$day;

    $days = $day;
    switch ($month - 1) {
        case 11:
            $days += 30;
        case 10:
            $days += 31;
        case 9:
            $days += 30;
        case 8:
            $days += 31;
        case 7:
            $days += 31;
        case 6:
            $days += 30;
        case 5:
            $days += 31;
        case 4:
            $days += 30;
        case 3:
            $days += 31;
        case 2:
            $days += 28;
            if (($year % 400 == 0) || ($year % 4 == 0) && ($year % 100 <> 0))
                $days += 1;
        case 1:
            $days += 31;
    }

    echo "这是{$year}年的第{$days}天!";
}
?>
上述代码有一个bug,年份、月份、日期没有限制,可以输入任何数。能力有限,没法解决这个问题,可以解决的欢迎留言!

while循环

  • 格式
while (表达式){
	语句1;
	[]
}while (表达式):
	语句1;
	[]
endwhile
  • 如果表达式成立则执行循环体语句
  • 如果条件不成立,则不执行循环体语句
  • 第一种格式,如果有多个语句则需要使用{}包裹多个语句
  • 第二种格式,whileendwhile成对出现

:计算1+2+3+……+100的值。

<?php
$n=0;
$i=1;

while ($i<=100){
    $n+=$i;
    $i++;
}
echo $n;
?>
  • 使用第二种格式写
<?php
$n=0;
$i=1;

while ($i<=100):
    $n+=$i;
    $i++;
endwhile;
echo $n;
?>

在循环结束后,变量i的值为101,因为在100的时候,是满足循环条件的,当等于101时不满足,再退出循环

do while循环

  • 格式
do {
	语句1;
	[]
}
while(条件);
  • do…while循环是先循环一次,在判断条件,条件成立(非空、非0、非false、非null、非空字符串),则再次执行循环
  • 至少执行一次
  • 如果循环体有多个语句,必须加大括号

:还是计算从1到100的和

<?php
$n=0;$i=1;  # 因为循环体$i先求和,在加1,所以初始变量为1

do {
    $n+=$i;
    $i++;
}while($i<=100);

echo $n."---".$i;  # 这里变量i的值为101
?>

运行结果:

5050---101
  • 当改变循环体的先后顺序时,再来看一下
<?php

$n=0;$i=0;  //因为循环体$i先加,后求和,所以初始变量为0

do {
    $i++;
    $n+=$i;
}while($i<100);  //这里因为循环体计算的已经是100了,如果再加等号,则计算的是1到101的值
echo $n."---".$i;  //这里变量i的值为100
?>

运行结果:

5050---100

for循环

  • PHP中最复杂的循环结构
  • 格式
for(表达式1;表达式2;表达式3)
	语句
  • 第一个表达式在循环开始前无条件求值(并执行)一次
  • 第二个表达式在每次循环开始前求值,如果为TRUE,则继续循环,执行嵌套的循环语句,如果值为false。则终止循环
  • 在每次循环之后被求值(并执行)
  • 表达式1、2、3可以都没有,但是;不能省略

:计算从1到100的和

<?php

$n=0;
for($i=1;$i<=100;$i++)
    $n+=$i;

echo $n."---".$i;  //这里变量i的值为101

# 也可以写成这样
for($i=1,$n=0;$i<=100;$i++)
    $n+=$i;

echo $n."---".$i;

# 不要表达式三的写法
for($i=1,$n=0;$i<=100;)
    $n+=$i;
    $i++;
echo $n."---".$i;

#不要表达式二的写法
$n=0;
for($i=1;;$i++) {
    $n+=$i;
    if ($i==100)
        break;  //跳出switch、for、while、do…while等循环体
}

echo $n;
?>

foreach循环

  • 提供遍历数组的简单方式

  • 仅能应用于数组和对象

  • 两种语法:

    • foreach (array_expression as $value)statement返回数组的值
    • foreach (array_expression as $key => $value)statement返回数组的值和键
  • 只返回数组的值

<?php

$array1=array("id"=>"55","name"=>"Bad","sex"=>"male","age"=>21);
foreach($array1 as $value)
    echo $value."<br/>";
?>

运行结果:

55
Bad
male
21
  • 返回数组的键和值
<?php

$array1=array("id"=>"55","name"=>"Bad","sex"=>"male","age"=>21);
foreach($array1 as $key => $value)
    echo $key."---".$value."<br/>";
?>

运行结果:

id---55
name---Bad
sex---male
age---21

break

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

<?php
$arr = array('one','two','three','four','stop','five','six');
# each读出列表中的元素值,将值赋给$val
while (list (,$val) = each($arr)){
    if ($val == 'stop'){
        break;
    }
    echo "$val<br/>";
}
?>

运行结果:

one
two
three
four

:跳出指定层循环

<?php
$i = 0;
while (++$i){
    switch($i){
        case 5:
            echo "At 5<br/>";
            break 1;  //当变量i的值为5时,直接跳出switch循环
        case 10:
            echo "At 10;quitting<br/>";
            break 2;  //当变量i的值为10时,跳出while循环
        default:
            break;
    }
}
?>

运行结果:

At 5
At 10;quitting

:判断一个数是否为素数

  • 素数只有1和它本身两个因子
<?php
//使用utf-8编码,不然可能会出现乱码
header("Content-Type:text/html;charset=utf-8");

$n=53;
$flag=1;
for($i=2;$i<$n;$i++)
    if($n % $i==0){  //判断$n除了1和它本身之外是否还有其他的因子
        $flag=0;  //if语句成立则改变$flag的值
        break;
    }
if ($flag==1)  //通过$flag的值来判断$n是否为素数
    echo "{$n}是素数!";
else
    echo "{$n}不是素数!";
?>

运行结果:

53是素数!

continue

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

:求1+2+4+5+7+…+97+98+100的和

<?php
$s=0;
for($i=0;;) {  //这里也可以写成for ($i=0;$i<100;)
    $i++;
# 如果$i的值为3的倍数,则跳过此次循环
    if ($i % 3 == 0)
        continue;
    $s += $i;
# 如果$i的值为100,则终止循环
    if ($i==100)
        break;
}
echo $s;  //输出$s
?>

运行结果:

3367

<?php
for ($i=1;$i<=1;$i++) {
    echo "111<br/>";  //条件成立,输出
    while (1) {
        echo "222<br/>";  //条件成立,输出
        while (1) {
            echo "333<br/>";  //条件成立,输出
            continue 3;  //跳出三层循环,重新进入for循环
        }
        echo "444<br/>";
    }
    echo "555<br/>";
}
?>

i = 1 i=1满足条件, i=2,进入for循环,打印111,条件1恒成立,进入第一个while循环,打印222。同样再次进入第二个while循环,打印333。跳出三层循环,重新进入到for循环。$i=2不满足条件,结束语句。

运行结果:

111
222
333

这一节需要动手敲的代码是真的很多,需要理清思路,再去动手编写代码。需要多理解,多练习。

以上内容均属原创,如有不详或错误,敬请指出。
本文作者: 坏坏

猜你喜欢

转载自blog.csdn.net/qq_45668124/article/details/104779858
今日推荐