PHP基础语法3

一:循环

1.1 for

for(初始值;条件;增量){
	//循环体
}

注意:循环中千万不能出现死循环

思考:如下代码输出什么

例题一:

<?php
for($i=1;$i<=10;$i+=2){
    echo "{$i}:锄禾日当午<br>";
}
/*
1:锄禾日当午
3:锄禾日当午
5:锄禾日当午
7:锄禾日当午
9:锄禾日当午
*/

例题二:

<?php
    for($i=1;$i<=10;){
        
    }
//死循环,$1永远等于1,1永远小于10,条件永远为true

例题三:

<?php
    for($i=1;;$i++){
}
//死循环,只要没有条件都是死循环

例题四:

<?php
    for(;;){
}
//这是一个经典的死循环

1.2 思考题

1、如下代码循环了几次?

for($i=1;$i!=5;$i++){

}
//循环了4次

2、在循环N次循环体中,初始值执行了次?条件执行了几次?增量执行了几次?

//初始值执行了1次
//条件执行了N+1次
//增量执行了N次

3、在循环执行完毕后,$i的值是存在的

<?php
    for($i=1;$i<=3;$i++){
}
echo $i;//4

1.3 while、do-while

语法:

while(条件){
}
----------------------------------------
do{
        
}while(条件)

小结:

  1. for、while、do-while可以相互替换
  2. 如果明确知道循环多少次首选for循环,如果要循环到条件不成立为止选while或do-while
  3. 先判断再执行选while,先执行再判断选do-while
  4. while循环条件不成立就不执行,do-while至少执行一次

1.4 例题

1、使用三种循环实现从1加到100

<?php
    //1、for循环实现
    $sum=0;
for($i=1;$i<=100;$i++){
	$sum+=$i;  //$sum=$sum+$i;
}
echo $sum;

//分析
/*
$i   $sum
1	 1
2	 1+2
3	 1+2+3
4	 1+2+3+4
...
100	 1+2+3+4+..+100
*/
---------------------
    //2、while循环
    $i=1;
$sum=0;   //保存和
while($i<=100){
	//方法一
    /*
    	$sum+=$i;
    	$i++;
    */
    
    //方法二
    $sum+=$i++;
}
echo $sum;
---------------------
//3、do-while循环
$i=1;
$sum=0;
do{
	$sum+=$i;
    $i++;
}while($i<=100);
echo $sum,'<br>';  //5050

//可以有如下更改
$i=1;
$sum=0;
do{
    $sum+=$i++;  //++后置
}while($i<=100);
echo $sum,'<br>'; //5050

//可以做如下更改
$i=1;
$sum0;
do{
	$sum+=$i;
}while(++$i<=100);  //++前置
echo $sum,'<br>';  //5050

小结:

1、for、while、do-while可以相互替换

2、结合++前置和++后置考虑逻辑

1.5 多语句表达式

初始值、增量可以由多条语句组成

例题:数字分解

<?php
    for($i=1;$j=9;$i<=$j;$i++,$j--){
		echo "10可以分成{$i}he{$j}<br>";
    }
//运行结果
/*
10可以分成1和9
10可以分成2和8
10可以分成3和7
10可以分成4和6
10可以分成5和5
*/

小结:初始值、增量可以写多个表达式,但是条件一般只写一个,如果条件写多个,只是最后一个条件起作用

1.6 双重循环

1、打印阶梯数字

<?php
for($i=1;$i<=9;$i++){
    for($j=1;$j<=$i;$j++){
        echo $j.'&nbsp';
    }
    echo '<br>';
}
?>
    //运行结果
1 
1 2 
1 2 3 
1 2 3 4 
1 2 3 4 5 
1 2 3 4 5 6 
1 2 3 4 5 6 7 
1 2 3 4 5 6 7 8 
1 2 3 4 5 6 7 8 9 

2、打印九九乘法表

<style>
table{
    width:630px
}
    table,td{
        border:solid 1px #0000FF;
		border-collapse:collapse;
    }
    td{
        height:40px;
        line-height:40px;
        text-align:center;
    }
</style>
<body>
<table>
<?php
    for($i=1;$i<=9;$i++){
        for($j=1;$j<=$i;$j++){
            echo '<td>'."{$j}*{$i}=".($i*$j).'</td>';
        }
        echo '<tr>';
    }
?>
</table>
</body>

在这里插入图片描述

小结:规则:当前列*当前行

1.6 foreach

foreach循环是用来遍历数组

语法:

//语法一
foreach(数组 as){ 
}
//语法二
foreach(数组 as=>){
}

例题:

<?php
    $stu=['tom','berry','ketty'];
foreach($stu as $v){
    echo $v,'<br>';
}
/*
tom
berry
ketty
*/
echo '<hr>'
----------------------------------------------------
foreach($stu as $k=>$v){
	echo "{$k}:{$v}<br>";
}
/*
0:tom
1:berry
2:ketty
*/

二、跳转语句

2.1 语法

break:中断循环

continue:中断当前循环,进入下一个循环

例题:

<?php
    for($i=1;$i<=10;$i++){
		if($i==5)
            break;
        echo "{$i}:锄禾日当午<br>";
    }
//结果
1:锄禾日当午
2:锄禾日当午
3:锄禾日当午
4:锄禾日当午
-------------------------------------------------------
<?php
    for($i=1;$i<=10;$i++){
	if($i==5)
        continue;//跳出5,进入6循环
        echo "{$i}:锄禾日当午<br>";
    }
//结果
1:锄禾日当午
2:锄禾日当午
3:锄禾日当午
4:锄禾日当午    //注意,没有打印第5句
6:锄禾日当午
7:锄禾日当午
8:锄禾日当午
9:锄禾日当午
10:锄禾日当午    

2.2 中断多重循环

break和continue默认中断、跳出1重循环,如果需要中断,跳出多重循环,在后面加一个数字

<?php
for($i=1;$i<=10;$i++){
        for($j=1;$j<=$i;$j++){
            echo $j.'&nbsp';
            if($j==5){
			break 2; //中断2重循环
            }
    	}
    echo '<br>';
}
//运行结果
1 
1 2 
1 2 3 
1 2 3 4 
1 2 3 4 5 

练习

<?php
    for($i=1;$i<=10;$i++){
        switch($i){
    		case 5;
                break 2;
        }
        echo $i,'<br>';
}
//结果
1
2
3
4

小结:switch的本质是循环了一次的循环

三、替代语法

php中除了do-while以外,其他的语法结构都有替代语法

规则:左大括号变冒号,右大括号变endXXX

//if的替代算法
if():
elseif():
else:
endif;

//switch替代语法
switch():
endswitch;

//for替代语法
for():
endfor;

//while替代语法
while():
endwhile;

//foreach替代语法
foreach():
endforeach;

例题:在混编的时候用替代语法

<?php
    for($i=1;$i<=10;$i++):
	if($i%2==0):
?>
    <?php echo $i;?>:锄禾日当午<br>
<?php
        endif;
endfor;
?>
//运行结果
2:锄禾日当午
4:锄禾日当午
6:锄禾日当午
8:锄禾日当午
10:锄禾日当午

小结:可以通过替代语法证明else if之间如果有空格是嵌套if语句

<?php
    $score=80;
if($score>=90):
	echo 'A';
elseif($score>=80)://elseif之间没有空格,如果有空格是嵌套if语句
	echo 'B';
else:
	echo 'C';
endif;
--------------------------------------------------------
<?php
    $score=80;
if($score>=90):
echo 'A';
else:
	if($score>=80):
		echo 'B';
	else:
		echo 'C';
	endif;
endif;

四、函数

1、函数是一段代码块

2、函数可以实现模块化编程

4.1、函数定义

function 函数名(参数1,参数2....){
	//函数体
}

通过函数名()调用函数

<?php
    //定义函数
    function show(){
	echo '锄禾日当午<br>';
	}
//调用
show();  	//锄禾日当午
SHOW();		//锄禾日当午  函数名不区分大小写
?>

小结:

1、变量名区分大小写

2、关键字、函数名不区分大小写

4.2、可变函数

将函数名存储到变量中

<?php
	function show($args){
	echo $args,'<br>';
}    
$str='show';	//将函数名保存到变量中
$str('锄禾日当午');

例题:随机调用函数

<?php
    //中文显示
    function showChinese(){
		echo '锄禾日当午<br>';
}
	//英文显示
	function showEnglish(){
		echo 'chu he ri dang wu'; 
}
//测试
$fun=rand(1,10)%2?'showChinese':'showEnglish';   //可变变量
$fun();

4.3、匿名函数

匿名函数就是没有名字的函数

<?php
    //匿名函数
    $fun=function(){
	echo '锄禾日当午<br>';
};
// 匿名函数调用
$fun();

4.4、参数传递

函数的参数有形式参数和实际参数

形式参数是定义函数时候的参数,只起形式的作用,没有具体的值

实际参数的调用函数时候的参数,有具体的值

<?php
    function fun($num1,$num2){
    	echo $unm1+$num2;
}
fun(10,20);//30

默认情况下,参数的传递是值传递

<?php
    $sum=10;
	function fun($args){
		$args=100;
    }
fun($sum);
echo $sum;
//10

地址传递

<?php
    $num=10;
//地址传递
function fun(&$args){//&符表示变量指向的地址
	$args=100;
}
fun($num);
echo $num;//100

小结:

1、函数的参数默认是值传递

2、如果要传递地址,在参数前面加&

3、如果是地址传递,不能直接写值

function fun(&$args){
    $args=100;
}
fun(10);  //Fatal error: Only variables can be passed by reference (只有变量才能传递引用)

4.5、参数默认值

1、在定义函数的时候给形参赋值就是参数的默认值

<?php
    //参数的默认值
    function fun($name,$add='地址不详'){
		echo '姓名:'.$name,'<br>';
    	 echo '地址:'.$name,'<br>';
}
//测试
fun('tom','北京');
fun('berry');

在这里插入图片描述

2、默认值必须是值,不能用变量代替

<?php
    $str='地址不详';
function fun($name,$add=$str){  //错误,默认值不可以使用变量
	echo '姓名;'.$name,'<br>';
    echo '地址;'.$add,'<br>';
}

3、默认值可以使用常量

<?php
    define('ADD','地址不详');
function fun($name,$add=ADD){
	echo '姓名:'.$name,'<br>';
    echo '地址:'.$add,'<hr>';
}
//测试
fun('berry');

4、有默认值的写在后面,没有默认值的写在后面

<?php
    //没有默认值的写在前面,有默认值写在后面
    function fun($name,$age='未知',$add='地址不详'){
	echo "姓名:{$name}<br>";
    echo "年龄:{$age}<br>";
    echo "地址:{$add}<br>";
}
fun('tom');
//运行结果
姓名:tom
年龄:未知
地址:地址不详

4.6、参数个数不匹配

<?php
    function fun($num1,$num2){
    	echo $num1,'<br>';
    	echo $num2,'<br>';
}
//fun(10);//实参少于形参(报错)
fun(10,20,30);//实参多于形参,只取前面对应的值

获取所有传递的参数

<?php
    function fun(){
//echo func_num_args(),'<br>';//获取参数的个数
    $args=func_get_args();//获取参数数组
    print_r($args);
}
fun(10);
echo '<br>';
fun(10,20);
echo '<br>';
fun(10,20,30); 

4.7、参数约束

4.7.1、定义变长参数(了解)

<?php
    // ...$hobby包含了除了前面两个参数以外的所有参数
    function fun($name,$age,...$hobby){
	echo '姓名:'.$name,'<br>';
    echo '年龄:'.$age,'<br>';
    print_r($hobby);
    echo '<hr>';
}
fun('tom',22);
fun('berry',25,'读书','睡觉');

在这里插入图片描述

多学一招:

function fun(...$args){
	print_r($args);
    echo '<br>';
}
$num=[10,20];
echo '<pre>';
fun(..$num);//将数组中的参数展开
//运行结果
/*
Array
(
    [0] => 10
    [1] => 20
)
*/

4.7.2、参数类型约束

<?php
//类型约束
function fun(string $name,int $age) {
	echo "姓名:{$name}<br>";
	echo "年龄:{$age}<br>";
}
fun('tom',22);
//约束$name是字符串型,$age是整型

4.7.3、返回值约束

function fun(int $num1,int $num2):int{//必须返回整型
	return $num1+$num2;
}
echo fun(10,20);  //30

可以约束:string、int、float、bool、数组

//约束返回类型是数组
function fun():array{
}
//约束return后面不能有返回值    必须在7.1以后的版本中才能支持
function fun():void{
	return;
}
fun();

五、return

5.1、终止脚本执行

<?php
    echo '锄禾日当午<br>';
	return; //终止脚本执行
	echo '汗滴禾下土<br>';//不执行

提醒:return只能中断当前页面,如果有包含文件,只能中断包含文件

例题:

6-demo.php

<?php
    echo '锄禾日当午<br>';
	require './test.php';//包含文件
	echo '汗滴禾下土<br>';

test.php

<?php
echo 'aaa<br>';
return;   //只能中断test.php
echo 'bbb<br>';

在这里插入图片描述

如果要完全终止脚本执行,使用exit(),或die()

echo 'aaa<br>';
exit(); //die()
echo 'bbb<br>';

5.2、返回页面结果

test.php

<?php
    return array('name'=>'tom','sex'=>'男')

6-demo.php

<?php
    $stu=require './test.php';
print_r($stu); //Array([name]=>tom [sex] => 男)

小结:在项目中引入配置文件就使用这种方法

5.3、函数的返回和终止

return在函数中使用作用有二

1、终止函数执行

2、返回值

function fun(){
    echo 'aaa';
    return; //终止函数执行
    echo 'bbb';
}
fun();///aaa
------------------------------------------
function fun(){
	return 10;//返回值
}
echo fun();//10

六、 作业

1、 通过for循环将数组中值求和、求平均值

<?php
 $num=[1,25,36,34,54,84,23,41,52,64,531];
 $sum=0;
 for($i=0,$j=count($num);$i<$j;$i++){
	 $sum+=$num[$i];
 }
 $ave=(float)$sum/count($num);
//echo '平均值:'.number_format($sum/count($num),1);  
 echo '和为:'.$sum,'<br>';
 echo '平均值为:'.$ave;

2、数组翻转

$stu=['tom','berry','ketty','rose','jake'];
for($i=0,$j=count($stu)-1;$i<$j;$i++,$j--){
	[$stu[$i],$stu[$j]]=[$stu[$j],$stu[$i]];   //元素交换
    // 7.1以上才支持
}
print_r($stu); 
//Array ( [0] => jake [1] => rose [2] => ketty [3] => berry [4] => tom ) 

3、遍历二维数组

$stu=[
	[1,2,3,4],
	[10,20,30,40]
];
for($i=0;$i<count($stu);$i++){	//循环第一列
	for($j=0;$j<count($stu[$i]);$j++){   //循环第二列
		echo $stu[$i][$j],'&nbsp;';
	}
	echo '<br>';
}
//运行结果
1 2 3 4 
10 20 30 40 

4、 循环输出1-100,其中3的倍数输出A,5的倍数输出B,15输出C。

for($i=1; $i<=100; $i++) {
	if($i%15==0)   //先写%15,,因为可以%15的值一定可以%3和%5
		echo 'C';
	elseif($i%3==0)
		echo 'A';
	elseif($i%5==0)
		echo 'B';
	else
		echo $i;

	echo '&nbsp;';
}

5、 打印水仙花数

<?php
for($i=100;$i<=999;$i++){
	$a=(int)($i/100); //百位数
	$b=(int)(($i%100)/10);//十位数
	$c=$i%10;//个位数
	if($i==pow($a,3)+pow($b,3)+pow($c,3))
		echo $i,'<br>';
}

//pow($a,3)  表示$a的三次方
//运行结果
153
370
371
407

6、 打印100以内的斐波那契数(迭代法) 1 1 2 3 5 8 13 21 …

$num1=1;   //第一个数
$num2=1;    //第二个数
echo $num1,'&nbsp;',$num2,'&nbsp;';
while(true){
	$num3=$num1+$num2;   //第三个数是前面两个数的和
	if($num3>100)		 //超过100就终止循环
		break;
	echo $num3,'&nbsp;';
	$num1=$num2;		//将$num2移给$num1
	$num2=$num3;		//将$num3移给$num2
}
//1 1 2 3 5 8 13 21 34 55 89 

7、 打印星星

在这里插入图片描述

8、 生成颜色面板

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值