小米技术社区
小米技术社区管理员 关于小米

27岁,山西运城人,职业电商经理人,前端开发工作者,从事过网站建设、网络推广、SEO、SEM、信息流推广、二类电商、网络运维、软件开发,等相关电商工作,经验较为丰富,小米技术社区致力于为广大从事Web前端开发的人员提供一些力所能及的引导和帮助 ...[更多]

E-mail:mzze@163.com

Q Q:32362389

W X:xiaomi168527

小米技术社区大牛王飞 关于王飞

27岁,山西运城人,职业电商经理人,网络工程师兼运维,从事过运营商网络建设,企业网络建设、优化。数据中心网络维护等通过,经验丰富,座右铭:当自己休息的时候,别忘了别人还在奔跑。 ...[更多]

E-mail:wf_live@126.com

Q Q:3940019

微博:王小贱ss

小米技术社区设计小艳 关于小艳

大于花一样的年龄,河南郑州是我家,2010年在北京接触团购网,2011年进入天猫淘宝一待就是四年,如今已经将设计走向国际化(ps:误打误撞开始进入阿里巴巴国际站的设计,嘿嘿)五年电商设计,丰富经验,从事过天猫淘宝阿里各项设计,店铺运营,产品拍摄;我将我的经历与您分享是我的快乐!座右铭:越努力越幸运! ...[更多]

E-mail:97157726@qq.com

Q Q:97157726

标签云
精品推荐
您的位置:首页 > 后端编程 > PHP > PHP基础

PHP的for循环 while循环、do-while循环、foreach循环,它们的使用场景?

分类: PHP基础51个赞

for循环,while循环,do-while循环是PHP常用的循环方式,他们有如下特点:

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

(2)什么时候用for循环?

如果明确知道循环多少次首先for循环,

(3)什么时候用while和dowhile循环?

如要要循环到条件不成立为止选while或do-while

先判断再执行选while,先执行再判断选do-while

while循环条件不成立就不执行,do-while至少执行一次

(4)foreach循环

foreach循环是用来遍历数组

(5)跳转语句break和continue在循环中的作用

break:中断循环

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

image.png

for循环

for循环语法:

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


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


for循环支持多语句表达式

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

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

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

思考:如下代码输出什么


DEMO一:


<?php
for($i=1;$i<=10;$i+=2){
    echo "{$i}:床前明月光<br>";
}
/*
1:床前明月光
3:床前明月光
5:床前明月光
7:床前明月光
9:床前明月光
*/



DEMO二 不写增量死循环:


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



DEMO三 不写条件死循环



<?php

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

}

//死循环,只要没有条件都是死循环



DEMO四 啥都不写死循环



<?php

for(;;){

}

//这是一个经典的死循环



思考题


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


for($i=1;$i!=5;$i++){
    
}
//循环了4次
1 2 3 4




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



初始值执行了1次

条件执行了N+1次

增量执行了N次



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



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


while、do-while循环

语法:

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


foreach循环

foreach循环是用来遍历数组

语法

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

DEMO:

<?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
*/

循环替代语法

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

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

//if的替代语法
    if():

    elseif():

    else:

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

    endswitch;
//for
    for():

    endfor;
//while
    while():

    endwhile;
//foreach
    foreach():

    endforeach;

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

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

DEMO2:可以通过替代语法证明else if之间如果有空格是嵌套if语句。(js中else if要带空格,而PHP必须连着写elseif,不连着写就是嵌套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;

跳转语句break和continue

语法

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

DEMO1: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:锄禾日当午

DEMO2:break和continue中断多重循环

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

//例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


//例2
<?php
for($i=1; $i<=10; $i++) {
	switch($i){
		case 5:
			break 2;
	}
	echo $i,'<br>';
}
//结果
1
2
3
4
//switch的本质是循环了一次的循环

for循环,while循环,do-while循环相关练习

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+++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;
$sum=0;
do{
	$sum+=$i;
}while(++$i<=100);    //++前置
echo $sum,'<br>';		//5050

小结:

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

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


双重循环


双重循环demo:

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 type="text/css">
	table{
		width:980px;
	}
	table,td{
		border:solid 1px #0000FF;
		border-collapse:collapse;
	}
	td{
		height:40px;	
	}
</style>

<table>
<?php
for($i=1;$i<=9;$i++){	//行
	echo '<tr>';
	for($j=1;$j<=$i;$j++){	//列
		echo "<td>{$j}*{$i}=".($j*$i).'</td>';
	}
	echo '</tr>';
}
?>
</table>

双重循环99乘法表




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

<?php
//1、求数组的和、平均值
$num=[1,20,53,23,14,12,15];
$sum=0;
for($i=0,$n=count($num);$i<$n;$i++){
	$sum+=$num[$i];
}
echo '和是:'.$sum,'<br>';		//和是:138
echo '平均值:'.number_format($sum/count($num),1);   //精确到小数点后面1位  平均值:19.7
echo '<hr>';


for循环demo2:数组翻转

$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]];   //元素交换
}
print_r($stu); //Array ( [0] => jake [1] => rose [2] => ketty [3] => berry [4] => tom )


for循环demo3:遍历二维数组

$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


for循环demo4:循环输出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;';
}


小米技术社区