重复处理用于将相同的处理重复一定次数或在满足一定条件的情况下进行。在这里,我将解释如何在 PHP 中使用循环过程,例如 for 和 while 语句。
while 语句作为重复处理的方法,当while 语句在指定的条件表达式为真时重复执行。格式如下。
while (条件表达式){
要执行的操作 1;
要执行的操作 2;
}
与 if 语句一样,条件表达式使用比较运算符,例如“x == 15”和“y > 22”。如果条件表达式为真 (TRUE),则执行块中描述的处理。然后再次评估条件表达式。如果为真 (TRUE),则再次执行块中的处理,如果为假 (FALSE),则终止 while 语句。
如果只执行一个进程,可以省略块状,写成如下。
while(条件表达式)
要执行的操作;
现在让我们看看 while 语句是如何执行的。请看以下示例。
$num = 0;
while (num < 2){
print "num=".$num;
}
这时候执行如下。
1)将“0”赋给变量“$num”
2)计算条件表达式。由于变量“num”小于2,执行块中的处理
3)输出变量“num”的值
4)由于已经到达块尾,返回到while语句的开头
5)评估条件表达式。由于变量“num”小于 2,执行块中的处理
6)输出变量“num”的值
7)无限反复执行(4)到(6)的程序
只要条件表达式不为假 (FALSE),while 语句就会在块内重复执行多次处理。因此,如果不在块中编写改变条件表达式的处理,就会变成死循环。
因此,我们把它改良为如下:
$num = 0;
while (num < 2){
print "num=".$num;
$num += 1;
}
这时候执行如下。
1) 将“0”赋给变量“$num”
2) 计算条件表达式。由于变量“num”小于 2,因此执行块中的处理
3) 输出变量“num”的值
4) 将分配给变量“num”的值加 1。“1”被分配给变量“num”
5) 由于已经到达块末尾,返回到 while 语句的开头
6) 评估条件表达式。由于变量“num”小于 2,因此执行块中的处理
7) 输出变量“num”的值
8) 将分配给变量“num”的值加 1。“2”被赋值给变量“num”
9) 由于已经到达块的末尾,再次返回到 while 语句的开头
10) 评估条件表达式。结束while语句,因为变量“num”不小于2
这次,块内的处理更改了条件表达式中使用的变量的值。因此,当迭代过程重复一定次数后,条件表达式变为假(FALSE),while 语句结束。
当重复次数不固定时,while 语句是一种有效的语法。但是,您需要非常小心,不要陷入无限循环。
示例代码
让我们用一个简单的程序来试试吧。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>PHP TEST</title>
</head>
<body>
<p>PHP TEST</p>
<p>
<?php
$num = 0;
while ($num < 3){
print 'num = '.$num.'<br />';
$num += 1;
}
?>
</p>
</body>
</html>
如果将上述文件放在WWW服务器的文档根目录下,用浏览器访问,将显示如下。
虽然不限于while语句,但是在while语句中执行的处理中可以写入另一个while语句
while (条件式1) {
要执行的操作;
要执行的操作;
while (条件式2) {
要执行的操作;
}
}
如果外部 while 语句的条件表达式为真 (TRUE),则执行块中的处理。而写在里面的while语句作为要执行的进程之一执行。每执行一次外部while语句块中的处理,就会重复执行内部while语句。
例如:
$i = 0;
while ($i < 3){
$j = 0;
while ($j < 3){
print '(i, j)=('.$i.','.$j.')';
$j += 1;
}
$i += 1;
}
在这种情况下,每次执行外部 while 语句都会执行 3 次内部 while 语句。外层的 while 语句执行了 3 次,所以最里面的操作一共执行了 9 次。
像这样一边改变两个条件一边重复处理是很常见的过程。
示例代码
让我们用一个简单的程序来试试吧。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>PHP TEST</title>
</head>
<body>
<p>PHP TEST</p>
<p>
<?php
$i = 0;
while ($i < 3){
$j = 0;
while ($j < 3){
print '(i, j)=('.$i.','.$j.')<br />';
$j += 1;
}
$i += 1;
}
?>
</p>
</body>
</html>
如果将上述文件放在WWW服务器的文档根目录下,用浏览器访问,将显示如下。
如果在循环处理中执行 break,则可以终止循环处理。除了循环 while 语句之外,break 还用于 switch 语句。
break;
例如:
$count = 1;
$sum = 0;
while ($count <= 99){
$sum += $count;
if ($sum > 1200){
print '超过了1200, 最后的数字是count = '.$count.' ';
break;
}
$count += 1;
}
// break:执行break的位置
print 'sum = '.$sum;
上面显示了从 1 到 99 的变量值求和的结果。当 while 语句块中总值超过 1200 时执行 break。然后处理结束while语句并移动到下一个处理。
通过这样使用 break,可以随时退出 while 语句。
指定迭代过程退出的层次
默认情况下,break 退出最里面的 while 语句并继续进行下一个过程。如果中断在嵌套迭代内,您可以指定要中断的级别数。
请参见以下示例。
$i = 1;
while ($i < 5){
$j = 1;
whike ($j < 5){
if ($i * $j > 15){
break;
}
$j += 1;
}
// break:执行break的位置
$i += 1;
}
在这种情况下,变量“i”和变量“j”在内部 while 语句中相乘,如果值超过 15,则执行 break。默认情况下,break 会退出写入 break 的最内层迭代,因此即使执行 break,也只会退出最内层的 while 语句。
您可以通过在分隔符中输入一个空格来指定要退出的层数。
break 階層数;
指定要退出的层数。
请参见以下示例
$i = 1;
while ($i < 5){
$j = 1;
whike ($j < 5){
if ($i * $j > 15){
break 2;
}
$j += 1;
}
$i += 1;
}
// break:执行break的位置
在这个例子中,当执行break时,它退出了2级的迭代过程,所以过程会移动到外层while语句之后。
像这样使用break,不仅可以强制退出迭代过程,还可以指定从多少层退出
示例代码
让我们用一个简单的程序来试试吧。。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>PHP TEST</title>
</head>
<body>
<p>PHP TEST</p>
<p>
<?php
$count = 1;
$sum = 0;
while ($count <= 100){
$sum += $count;
if ($sum > 1000){
print '超过了1000, 最后的数字是count = '.$count.'<br />';
break;
}
$count += 1;
}
print 'sum = '.$sum;
?>
</p>
</body>
</html>
如果将上述文件放在WWW服务器的文档根目录下,用浏览器访问,将显示如下。
在循环处理中执行 continue 时,不执行循环处理块内的后续处理,而是对下一个条件表达式求值。
continue;
例如:
$count = 0;
$sum = 0;
while ($count < 90){ // continue被実行的时候,开始的位置
$count += 1;
if ($count % 2 == 0){
continue;
}
$sum += $count;
}
print 'sum = '.$sum;
上面显示了从 1 到 90 的变量值求和的结果。在 while 语句块中,如果要添加的值是 2 的倍数,则处理转移到下一个条件表达式的评估而不执行添加。
通过这样使用continue,可以更详细地控制迭代内的处理。
此外,与 break 一样,您可以指定跳过多少层级并返回到条件表达式的计算。
continue 階層数;
指定层数。
请参见以下示例。
$count1 = 0;
$sum = 0;
while ($count1 < 10){ // continue被実行的时候,开始的位置
$count1 += 1;
$count2 = 0;
while ($count2 < 10){
$count2 += 1;
if ($count1 * $count2 > 30){
continue 2;
}
$sum += $count1 * $count2;
}
}
print 'sum = '.$sum;
在此示例中,当执行 continue 时,将跳过剩余的两层迭代处理,并处理移动到外部条件表达式的评估。
与 break 一样,continue 可以让您更好地控制迭代过程。
示例代码
让我们用一个简单的程序来试试吧。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>PHP TEST</title>
</head>
<body>
<p>PHP TEST</p>
<p>
<?php
$count1 = 0;
$sum = 0;
while ($count1 < 10){ // continueが実行された時に処理が移る位置
$count1 += 1;
$count2 = 0;
while ($count2 < 10){
$count2 += 1;
if ($count1 * $count2 > 30){
continue 2;
}
$sum += $count1 * $count2;
}
}
print 'sum = '.$sum;
?>
</p>
</body>
</html>
如果将上述文件放在WWW服务器的文档根目录下,用浏览器访问,将显示如下。
while 语句首先对条件表达式求值,因此根据情况,块中的处理可能一次都不会执行,但是 do..while 语句在处理总是执行一次时很方便。 . 格式如下。
do{
要执行的操作 1;
要执行的操作 2;
}while(条件表达式);
在 do..while 语句中,在执行块内场处理后评估条件表达式。因此,块中的处理总是至少执行一次。如果条件表达式的评估为真 (TRUE),则再次返回开始并执行块中的处理。如果为假 (FALSE),则终止 do..while 语句。
如果只执行一个进程,可以省略block,写成如下。
do
要执行的操作;
while(条件表达式)
现在让我们看看 do..while 语句是如何执行的。考虑以下示例。
$num = 0;
do{
print "num=".$num;
$num += 1;
}while (num < 2);
这时候执行如下。
1) 将“0”赋值给变量“num”
2)输出变量“num”的值
3) 将分配给变量“num”的值加 1。变量“num”被赋值为“1”
4) 评估条件表达式。返回 do..while 语句的顶部,因为变量“num”小于 2
5) 输出变量“num”的值
6) 将分配给变量“num”的值加 1。“2”被分配给变量“num”
7) 评估条件表达式。结束 do..while 语句,因为变量“num”不小于 2
首先进行块内的处理,然后对条件表达式求值,决定是否继续迭代。
此外,可以使用 “ break ”和“ continue ”以及 while 语句。
示例代码
让我们用一个简单的程序来试试吧。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>PHP TEST</title>
</head>
<body>
<p>PHP TEST</p>
<p>
<?php
$num = 0;
do{
print 'num = '.$num.'<br />';
$num += 1;
}while ($num < 5);
?>
</p>
</body>
</html>
如果将上述文件放在WWW服务器的文档根目录下,用浏览器访问,将显示如下。
迭代计算条件表达式以确定是否继续迭代。条件表达式中可以写入各种条件,但通常使用重复指定次数等处理。例如,请参见以下示例。
$count = 0;
while ($count < 20){
// 要执行的操作
$count++;
}
此示例使用变量“count”来控制重复。因此,变量的初始化、使用变量的条件表达式的描述、块中变量的增加以及变量“计数”在这里和那里进行了描述。
如果以同样的方式改变变量的值,并用条件表达式求值,使用for语句可以写得更简洁。for语句的格式如下。
for(初始化表达式;条件表达式;改变表达式){
要执行的操作 1;
要执行的操作 2;
}
for 语句描述了三个表达式:初始化表达式、条件表达式和更改表达式。
初始化表达式只在 for 语句开始处理时执行一次,通常描述初始化条件表达式中使用的变量的表达式。
条件表达式用于判断是否继续迭代,就像while语句一样。如果条件表达式的评估为真 (TRUE),则执行块中的处理。如果为 FALSE,则终止 for 语句。
变量表达式通常描述每次重复时改变条件表达式中使用的变量的表达式。
如果把前面写在while语句中的例子写在for语句中,就会变成下面这样
for ($count = 0; $count < 20; $count++){
// 要执行的操作
}
这样,for语句可以写得简洁,同时集中描述迭代中使用的变量的控制,从而可以创建一个易于理解的程序。
如果只执行一个进程,可以省略block,写成如下。
for(初始化表达式;条件表达式;改变表达式)
要执行的操作;
让我们看看 for 语句是如何工作的。考虑以下示例。
for ($num = 0; $num < 2; $num++){
print "num=".$num;
}
这时候执行如下。
1) 将“0”赋值给变量“num”
2) 评估条件表达式。由于变量“num”小于 2,执行块中的处理
3) 输出变量“num”的值
4) 由于已经到达块的末尾,变量“num”加 1。变量“num”被赋值为“1”
5) 返回for语句的顶部,对条件表达式求值。由于变量“num”小于 2,执行块中的处理
6) 输出变量“num”的值
7) 由于已经到达块的末尾,变量“num”加 1。“2”被分配给变量“num”
8) 返回for语句的顶部并对条件表达式求值。结束for语句,因为变量“num”不小于2
基本处理流程与while语句相同。
此外,可以使用 “ break ”和“ continue ”以及 while 语句。
示例代码
让我们用一个简单的程序来试试吧。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>PHP TEST</title>
</head>
<body>
<p>PHP TEST</p>
<p>
<?php
for ($num = 0; $num < 4; $num++){
print 'num = '.$num.'<br />';
}
?>
</p>
</body>
</html>
如果将上述文件放在WWW服务器的文档根目录下,用浏览器访问,将显示如下。
for语句的基本格式如下。
for(初始化表达式;条件表达式;变化式){
要执行的操作 1;
要执行的操作 2;
}
在上一节中,我们在初始化表达式和更改表达式中写了一个变量的表达式,但是这里可以写多个表达式。在这种情况下,根据需要编写尽可能多的表达式,并用逗号分隔。
for (初始化表达式1, 初始化表达式2, ..; 条件表达式; 变化式1, 变化式2, ..){
要执行的操作 1;
要执行的操作 2;
}
例如,要初始化和更改两个变量,请编写:
for ($x = 0, $y = 10; $x < 20; $x++, $y--){
print'x='.$x.',y='.$y;
}
在这种情况下,值 0 被分配给变量“x”,值 10 被分配给变量“y”作为初始化表达式。然后,每次执行迭代时,变量“x”的值递增 1,变量“y”的值递减 1。
示例代码
让我们用一个简单的程序来试试吧。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>PHP TEST</title>
</head>
<body>
<p>PHP TEST</p>
<p>
<?php
for ($i = 0, $j = 4; $i < 4; $i++, $j--){
print 'i = '.$i.',j = '.$j.'<br />';
}
?>
</p>
</body>
</html>
如果将上述文件放在WWW服务器的文档根目录下,用浏览器访问,将显示如下。
当你想按顺序检索和处理数组中包含的每个元素的值时,foreach 语句很有用。格式如下。
foreach(数组变量 as 变量){
要执行的操作 1;
要执行的操作 2;
}
※对于数组,请参阅 “数组”。
指定要从中检索元素的数组和用于存储检索到的元素的值的变量。foreach语句迭代数组中包含的元素个数,每次重复时将数组中包含的元素的值赋值给变量。
让我们考虑一个具体的例子。
$preflist = array('北京', '上海', '青岛');
foreach ($preflist as $pref){
print $pref;
}
这时候执行如下。
1) 将数组“preflist”中的元素值“Tokyo”赋值给变量“pref”
2)输出变量“pref”的值
3)由于已经到了块尾,回到foreach语句的开头
4) 将数组“preflist”中的元素值“Osaka”赋值给变量“pref”
5)输出变量“pref”的值
6) 由于已经到达块尾,回到foreach语句的开头
7) 将数组“preflist”中的元素值“Nagoya”赋值给变量“pref”
8) 输出变量“pref”的值
9) 到达块的末尾,但迭代次数与数组中的元素数一样多。
结束 foreach 语句
与 while 和 for 语句不同,没有终止迭代的条件表达式。它重复数组中元素的数量并终止。
需要注意的一点是,数组元素本身并没有取出来,只是将元素的值复制到变量中赋值。如果要使用foreach 语句更改数组元素的值,请参阅 “使用foreach 语句更改数组元素的值”。
此外,可以使用 “ break ”和“ continue ”以及 while 语句。
示例代码
让我们用一个简单的程序来试试吧。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>PHP TEST</title>
</head>
<body>
<p>PHP TEST</p>
<p>
<?php
$preflist = array('北京', '上海', '青岛');
foreach ($preflist as $pref){
print $pref.'<br />';
}
?>
</p>
</body>
</html>
如果将上述文件放在WWW服务器的文档根目录下,用浏览器访问,将显示如下。
在上一节中,我们使用foreach语句将数组包含的元素的值存储在变量中。除了元素值之外,foreach 语句还提供用于提取键的语法。格式如下。
foreach (数组变量 as Key变量 => Value变量){
要実行的操作1;
要実行的操作2;
}
基本处理流程没有区别,但在这种语法中,每次迭代时,数组中包含的元素的值被赋值给值变量,键值被赋值给键变量。
例如:
$preflist = array('北京' => '北京', '上海' => '上海');
foreach ($preflist as $key => $value){
print $key.'=>'.$value;
}
在每次迭代时提取并显示数组元素的键和值。
示例代码
让我们用一个简单的程序来试试吧。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>PHP TEST</title>
</head>
<body>
<p>PHP TEST</p>
<p>
<?php
$preflist = array('Beijing' => '北京', 'Shanghai' => '上海');
foreach ($preflist as $key => $value){
print $key.'=>'.$value.'<br />';
}
?>
</p>
</body>
</html>
如果将上述文件放在WWW服务器的文档根目录下,用浏览器访问,将显示如下。
当 foreach 语句将元素的值存储在变量中时,会将值的副本分配给变量。因此,可以使用元素的值,但不能更改元素的值。可以一起获取键并更改数组变量的元素值,但您也可以使用以下格式
foreach(数组变量 as &变量){
要执行的操作 1;
要执行的操作 2;
}
您可以通过在变量前加上“&”来设置对元素值的引用。因此,通过为变量分配新值,可以更改元素的值。
例如:
$pricelist = array(80, 100, 120);
foreach ($pricelist as &$value){
$value *= 1.05;
}
unset($value);
这次我们获取元素值的引用,将每个元素值乘以 1.05 并再次存储。之所以在最后调用“unset”函数是因为即使foreach语句结束后,数组最后一个元素的引用仍然设置在变量“value”中,所以后续程序会错误地设置值元素的。显式释放变量,以免覆盖
示例代码
让我们用一个简单的程序来试试吧。
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>PHP TEST</title>
</head>
<body>
<p>PHP TEST</p>
<p>
<?php
$pricelist = array(80, 100, 200);
foreach ($pricelist as &$value){
$value *= 1.05;
}
unset($value);
foreach ($pricelist as $value){
print $value.'<br />';
}
?>
</p>
</body>
</html>
如果将上述文件放在WWW服务器的文档根目录下,用浏览器访问,将显示如下。