php循环控制语句(for,foreach while do while)

 更新时间:2016年11月25日 15:09  点击:1491

foreach

php教程 4(不是 php 3)包括了 foreach 结构,和 perl 以及其他语言很像。这只是一种遍历数组简便方法。foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。有两种语法,第二种比较次要但却是第一种的有用的扩展。


foreach (array_expression as $value) statement
foreach (array_expression as $key => $value) statement


 

 

第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。

第二种格式做同样的事,只除了当前单元的键值也会在每次循环中被赋给变量 $key。


注: 当 foreach 开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在 foreach 循环之前调用 reset()。

 

注: 此外注意 foreach 所操作的是指定数组的一个拷贝,而不是该数组本身。因此即使有 each() 的构造,原数组指针也没有变,数组单元的值也不受影响。

 

注: foreach 不支持用“@”来禁止错误信息的能力。


你可能注意到了以下的代码功能完全相同:


<?php
$arr = array("one", "two", "three");
reset ($arr);
while (list(, $value) = each ($arr)) {
   echo "value: $value<br>n";
}

foreach ($arr as $value) {
   echo "value: $value<br>n";
}
?> 


以下代码功能也完全相同:

<?php
reset ($arr);
while (list($key, $value) = each ($arr)) {
   echo "key: $key; value: $value<br>n";
}

foreach ($arr as $key => $value) {
   echo "key: $key; value: $value<br>n";
}
?> 

 

示范用法的更多例子:

 

<?php
/* foreach example 1: value only */

$a = array (1, 2, 3, 17);

foreach ($a as $v) {
   print "current value of $a: $v.n";
}

/* foreach example 2: value (with key printed for illustration) */

$a = array (1, 2, 3, 17);

$i = 0; /* for illustrative purposes only */

foreach ($a as $v) {
   print "$a[$i] => $v.n";
   $i++;
}

/* foreach example 3: key and value */

$a = array (
   "one" => 1,
   "two" => 2,
   "three" => 3,
   "seventeen" => 17
);

foreach ($a as $k => $v) {
   print "$a[$k] => $v.n";
}

/* foreach example 4: multi-dimensional arrays */

$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";

foreach ($a as $v1) {
   foreach ($v1 as $v2) {
       print "$v2n";
   }
}

/* foreach example 5: dynamic arrays */

foreach (array(1, 2, 3, 4, 5) as $v) {
   print "$vn";
}
?> 


for
for 循环是 php 中最复杂的循环结构。它的行为和 c 语言的相似。 for 循环的语法是:

 

for (expr1; expr2; expr3) statement


 

 

第一个表达式(expr1)在循环开始前无条件求值一次。

expr2 在每次循环开始前求值。如果值为 true,则继续循环,执行嵌套的循环语句。如果值为 false,则终止循环。

expr3 在每次循环之后被求值(执行)。

每个表达式都可以为空。expr2 为空意味着将无限循环下去(和 c 一样,php 认为其值为 true)。这可能不想你想象中那样没有用,因为你经常会希望用 break 语句来结束循环而不是用 for 的表达式真值判断。

考虑以下的例子。它们都显示数字 1 到 10:

 

<?php
/* example 1 */

for ($i = 1; $i <= 10; $i++) {
   print $i;
}

/* example 2 */

for ($i = 1; ; $i++) {
   if ($i > 10) {
       break;
   }
   print $i;
}

/* example 3 */

$i = 1;
for (;;) {
   if ($i > 10) {
       break;
   }
   print $i;
   $i++;
}

/* example 4 */

for ($i = 1; $i <= 10; print $i, $i++);
?> 

当然,第一个例子看上去最正常(或者第四个),但你可能会发现在 for 循环中用空的表达式在很多场合下会很方便。

php 也支持用冒号的 for 循环的替代语法。

 

for (expr1; expr2; expr3): statement; ...; endfor;


 

 

其它语言具有 foreach 语句来遍历数组或散列表,php 也行(见 foreach)。在 php 3 中,可以结合 list() 和 each() 函数用 while 循环来达到同样效果。例子见这些函数的文档。


do..while
do..while 和 while 循环非常相似,区别在于表达式的值是在每次循环结束时检查而不是开始时。和正规的 while 循环主要的区别是 do..while 的循环语句保证会执行一次(表达式的真值在每次循环结束后检查),然而在正规的 while 循环中就不一定了(表达式真值在循环开始时检查,如果一开始就为 false 则整个循环立即终止)。

do..while 循环只有一种语法:


<?php
$i = 0;
do {
   print $i;
} while ($i > 0);
?> 

 

以上循环将正好运行一次,因为经过第一次循环后,当检查表达式的真值时,其值为 false($i 不大于 0)而导致循环终止。

资深的 c 语言用户可能熟悉另一种不同的 do..while 循环用法,把语句放在 do..while(0) 之中,在循环内部用 break 语句来结束执行循环。以下代码片段示范了此方法:

 

<?php
do {
   if ($i < 5) {
       print "i is not big enough";
       break;
   }
   $i *= $factor;
   if ($i < $minimum_limit) {
       break;
   }
   print "i is ok";

   /* process i */

} while(0);
?> 

如果你还不能立刻理解也不用担心。即使不用此“特性”你也照样可以写出强大的代码来。


while
while 循环是 php 中最简单的循环类型。它和 c 语言中的 while 表现得一样。while 语句的基本格式是:

 

while (expr) statement


 

 

while 语句的含意很简单,它告诉 php 只要while 表达式的值为 true 就重复执行嵌套中的循环语句。表达式的值在每次开始循环时检查,所以即使这个值在循环语句中改变了,语句也不会停止执行,直到本次循环结束。有时候如果 while 表达式的值一开始就是 false,则循环语句一次都不会执行。

和 if 语句一样,可以在 while 循环中用花括号括起一个语句组,或者用替代语法:

 

while (expr): statement ... endwhile;


 

 

下面两个例子完全一样,都显示数字 1 到 10:

 

<?php
/* example 1 */

$i = 1;
while ($i <= 10) {
   print $i++;  /* the printed value would be
                   $i before the increment
                   (post-increment) */
}

/* example 2 */

$i = 1;
while ($i <= 10):
   print $i;
   $i++;
endwhile;
?> 

任何 php教程 脚本都是由一系列语句构成的。一条语句可以是一个赋值语句,一个函数调用,一个循环,甚至一个什么也不做的(空语句)条件语句。语句通常以分号结束。此外,还可以用花括号将一组语句封装成一个语句组。语句组本身可以当作是一行语句。本章讲述了各种语句类型。

if
if 结构是很多语言包括 php 在内最重要的特性之一,它允许按照条件执行代码片段。php 的 if 结构和 c 语言相似:


if (expr)
    statement


 

 

如同在表达式一章中定义的,expr 按照布尔求值。如果 expr 的值为 true,php 将执行 statement,如果值为 false - 将忽略 statement。有关哪些值被视为 false 的更多信息参见“转换为布尔值”一节。

如果 $a 大于 $b,则以下例子将显示 a is bigger than b:


<?php
if ($a > $b)
   print "a is bigger than b";
?> 

经常需要按照条件执行不止一条语句,当然并不需要给每条语句都加上一个 if 子句。可以将这些语句放入语句组中。例如,如果 $a 大于 $b,以下代码将显示 a is bigger than b 并且将 $a 的值赋给 $b:

 

<?php
if ($a > $b) {
   print "a is bigger than b";
   $b = $a;
}
?> 

 

if 语句可以无限层地嵌套在其它 if 语句中,这给程序的不同部分的条件执行提供了充分的弹性。


else
经常需要在满足某个条件时执行一条语句,而在不满足该条件时执行其它语句,这正是 else 的功能。else 延伸了 if 语句,可以在 if 语句中的表达式的值为 false 时执行语句。例如以下代码在 $a 大于 $b 时显示 a is bigger than b,反之则显示 a is not bigger than b:


<?php
if ($a > $b) {
   print "a is bigger than b";
} else {
   print "a is not bigger than b";
}
?> 


else 语句仅在 if 以及 elseif(如果有的话)语句中的表达式的值为 false 时执行(参见 elseif)。

 

elseif
elseif,和此名称暗示的一样,是 if 和 else 的组合。和 else 一样,它延伸了 if 语句,可以在原来的 if 表达式值为 false 时执行不同语句。但是和 else 不一样的是,它仅在 elseif 的条件表达式值为 true 时执行语句。例如以下代码将根据条件分别显示 a is bigger than b,a equal to b 或者 a is smaller than b:

 

<?php
if ($a > $b) {
   print "a is bigger than b";
} elseif ($a == $b) {
   print "a is equal to b";
} else {
   print "a is smaller than b";
}
?> 

 

在同一个 if 结构中可以有多个 elseif 语句。第一个表达式值为 true 的 elseif 语句(如果有的话)将会执行。在 php 中,也可以写成“else if”(两个单词),它和“elseif”(一个单词)的行为完全一样。句法分析的含义有少许区别(如果你熟悉 c 语言的话,这是同样的行为),但是底线是两者会产生完全一样的行为。

elseif 的语句仅在之前的 if 或 elseif 的表达式值为 false,而当前的 elseif 表达式值为 true 时执行。


else
经常需要在满足某个条件时执行一条语句,而在不满足该条件时执行其它语句,这正是 else 的功能。else 延伸了 if 语句,可以在 if 语句中的表达式的值为 false 时执行语句。例如以下代码在 $a 大于 $b 时显示 a is bigger than b,反之则显示 a is not bigger than b:


<?php
if ($a > $b) {
   print "a is bigger than b";
} else {
   print "a is not bigger than b";
}
?> 


else 语句仅在 if 以及 elseif(如果有的话)语句中的表达式的值为 false 时执行(参见 elseif)。

continue
continue 在循环结构用用来跳过本次循环中剩余的代码并开始执行下一次循环。

注: 注意在 php教程 中 switch 语句被认为是作为 continue 目的的循环结构。

continue 接受一个可选的数字参数来决定跳过几重循环到循环结尾。

 

<?php
while (list($key,$value) = each($arr)) {
if ($key == "zhoz"){ // 如果查询到对象的值等于zhoz,这条记录就不会显示出来了。
continue;
}
do_something ($value);
}
//  例子2
foreach ($list as $temp) {
if ($temp->value == "zhoz") {
continue; // 如果查询到对象的值等于zhoz,这条记录就不会显示出来了。
}
do_list; // 这里显示数组中的记录
}
?>

break
break 结束当前 for,foreach,while,do..while 或者 switch 结构的执行。

break 可以接受一个可选的数字参数来决定跳出几重循环。

<?php
$arr = array ('one', 'two', 'three', 'four', 'stop', 'five');
while (list (, $val) = each ($arr)) {
   if ($val == 'stop') {
       break;    /* you could also write 'break 1;' here. */
   }
   echo "$val<br>n";
}

/* using the optional argument. */

$i = 0;
while (++$i) {
   switch ($i) {
   case 5:
       echo "at 5<br>n";
       break 1;  /* exit only the switch. */
   case 10:
       echo "at 10; quitting<br>n";
       break 2;  /* exit the switch and the while. */
   default:
       break;
   }
}
?>

实例二

 

<?php
$i = 0;
while ($i < 7) {
if ($arr[$i] == "stop") {
break;
}
$i++;
}
?>

array()可以声明一个空数组;
array[] = $value 在数组存在时,追加一个数据;在数组不存时,生成一个数组,并追加数据。
array[$index] = $value 在数组存在时,追加或修改一个数据;在数组不存时,生成一个数组,并追加数据

range($n, $m); 指定值的范围。如range(2,4)生成数组 array(2,3,4)。
count($array); 取得数组的大小。
array_pad($array, $length, $value); 返回一个长度$length的数组,原不足数组补值为$value,长度足够返回原数组。

 

 代码如下 复制代码
// 声明数组
$test01 = array();
// 追加数据
$test01[] = "a";        // array(0 => "a");
// 追加一个索引为"a",数据为"b"的数据
$test01["a"] = "b";       // array(0 => "a", "a" => "b");
// 修改索引为0的数据
$test01[0] = "c";       // array(0 => "c", "a" => "b");
// 另一种声明方法
$test02 = array("a", "b", "c");         // array(0 => "a", 1 => "b", 2 => "c");
// 虽然声明了一个字符串索引的数据,但默认索引还是从0开始
$test03 = array("a" => "a", "b", "c");  // array("a" => "a", 0 => "b", 1 => "c");
// 声明中最大的索引为2,虽然最近是索引是0,但默认索引还是从3开始
$test04 = array(2 => "a", 0=>"b", "c");  // array(2 => "a", 0 => "b", 3 => "c");
// 声明一个小数索引会取其整数部分;指定索引时,会修改之前声明的值
$test05 = array("a", 2.7=>"b", 0=>"c");  // array(0 => "c", 2 => "b");
// 虽然声明了负数索引,但默认索引还是从0开始
$test06 = array(-2 =>"a", "b", "c");  // array(-2 => "a", 1 => "b", 2 => "c");
// 多维数组的定义


$test07 = array($test01, $test02, $test03);
php的数组,说白了,就是关联数据每一条数组都是以[索引,值]的形式保存的。其中索引默认是以0开始的数字。在未指定索引时,php会从0开始自动生成索引。当指定一个索引,php会从你指定索引最大正整数的下一个整数开始。如果你指定的是小数,php会取整数部分做为索引。

1、使用post方法提交表单
    使用方法:把<from>表单中的method标签属性改为“post”
    特点:post方法不依赖于url,不会再地址栏显示。post方法可以没有限制地传递数据到服务器,所有提交的信息在后台传输,用户在浏览器端是看不到这一过程的,安全性高。
    用于:适用于发送一些保密的或者容量较大的数据到服务器。
    实例: 

<form name=”from1′ method=”get” action=”index.php教程”>
订单号:<input type=”text” name=”user” size=”20′>
<input type=”submit” name=”submit” value=”提交”>
</form>


显示结果:
 
post提交不在url上显示提交表单的值 

 

 2、使用get方法提交表单
$_get 变量是一个数组,内容是由 http get 方法发送的变量名称和值。

$_get 变量用于收集来自 method="get" 的表单中的值。从带有 get 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),并且对发送的信息量也有限制(最多 100 个字符)。


    使用方法:把<from>表单中的method标签属性改为“get”
    特点:使用get方法提交表单数据将附加到url上,并作为url的一部分发送到服务器,在url上会显示传递数据的内容

    形式:http://url?name1=value1&name2=value2…
    url:为表单响应地址
    name1:为表单元素名称
    value1:为name1表单的值
    $:多个表单元素间的分隔符
    实例:

 

<form name=”from1′ method=”get” action=”index.php”>
用户名:<input type=”text” name=”user” size=”20′>
密码:<input name=”pwd” type=”password” size=”20′ >
<input type=”submit” name=”submit” value=”提交”>
</form>
输出结果:
 


 
使用get方式提交表单数据  


     从上面两点中我们能了解到两种提交方式有着两种截然不同的数据传输模式,使用post提交表单中的数据,数据信息完全在后台传输,不会显示在浏览器的url信息中。而get提交表单中的数据,则会在url中显示传递数据的值。今天对于这两种数据提交方法就介绍到这里


注释:http get 方法不适合大型的变量值;值是不能超过 100 个字符的。
$_request 变量
php 的 $_request 变量包含了 $_get, $_post 以及 $_cookie 的内容。

php 的 $_request 变量可用来取得通过 get 和 post 方法发送的表单数据的结果。

例子
welcome <?php echo $_request["name"]; ?>.<br />
you are <?php echo $_request["age"]; ?> years old!

[!--infotagslink--]

相关文章

  • mysql中获取一天、一周、一月时间数据的各种sql语句写法

    创建表:复制代码 代码如下:create table if not exists t( id int, addTime datetime default '0000-00-00 00:00:00′)添加两条初始数据:insert t values(1, '2012-07-12 21:00:00′);insert t values(2, '2012-07...2014-05-31
  • Java8处理List的双层循环问题

    这篇文章主要介绍了Java8处理List的双层循环问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-19
  • jquery中常用的SET和GET$(”#msg”).html循环介绍

    复制代码 代码如下: $(”#msg”).html(); //返回id为msg的元素节点的html内容。 $(”#msg”).html(”new content“); //将“new content” 作为html串写入id为msg的元素节点内容中,页面显示粗体的new content $(”...2013-10-13
  • php中的foreach函数的2种用法

    Foreach 函数(PHP4/PHP5)foreach 语法结构提供了遍历数组的简单方式。foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。...2013-09-28
  • 浅谈Java8 的foreach跳出循环break/return

    这篇文章主要介绍了Java8 的foreach跳出循环break/return,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-07-28
  • JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍

    下面小编就为大家带来一篇JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-05-20
  • C#条件语句、循环语句(if、while)

    这篇文章主要介绍了C#条件语句、循环语句(if、while)的用法,学习c#的朋友可以参考下...2020-06-25
  • C#的循环语句集锦及案例详解

    这篇文章主要介绍了C#中的基本循环:while循环、for循环和foreach循环,大家都知道循环结构可以简化程序编码,更好地实现理想的效果,并结合案例给大家讲解,需要的朋友可以参考下...2020-06-25
  • shell中的for循环用法详解

    这篇文章主要介绍了shell中的for循环用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-07-11
  • mybatis-plus  mapper中foreach循环操作代码详解(新增或修改)

    这篇文章主要介绍了mybatis-plus mapper中foreach循环操作代码详解(新增或修改),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-11-17
  • 解决vue-router路由拦截造成死循环问题

    这篇文章主要介绍了解决vue-router路由拦截造成死循环问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-05
  • python 实现循环定义、赋值多个变量的操作

    这篇文章主要介绍了python 实现循环定义、赋值多个变量的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
  • c# 循环语句的使用方法

    这篇文章主要介绍了c# 循环语句的使用方法,文中代码非常详细,供大家参考和学习,感兴趣的朋友可以了解下...2020-06-25
  • Mysql 原生语句中save or update 的写法汇总

    背景&#8195;&#8195;在平常的开发中,经常碰到这种更新数据的场景:先判断某一数据在库表中是否存在,存在则update,不存在则insert。 如果使用Hibernate,它自带saverOrUpdate方法,用起来很方便,但如使用原生sql语句呢? &#8195;...2015-03-15
  • Nodejs 数组的队列以及forEach的应用详解

    这篇文章主要介绍了Nodejs 数组的队列以及forEach的应用详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-25
  • jquery if条件语句的写法

    下面小编就为大家带来一篇jquery if条件语句的写法。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-05-20
  • Java8之Stream流代替For循环操作

    这篇文章主要介绍了Java8之Stream流代替For循环操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2020-08-19
  • Xml中使用foreach遍历对象实现代码

    这篇文章主要介绍了Xml中使用foreach遍历对象实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-12-04
  • JavaScript循环遍历的24个方法,你都知道吗

    这篇文章主要给大家介绍了关于JavaScript循环遍历的24个方法,文中对每种方法都给出了详细的实例代码,方便大家理解学习,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2021-09-15
  • c#入门之循环语句使用详解(for循环、do/while)

    这篇文章主要介绍了c#入门之循环语句使用详解,有for循环和do/while的示例,需要的朋友可以参考下...2020-06-25