PHP中foreach()用法汇总


Posted in PHP onJuly 02, 2015

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

foreach (array_expression as $value)
  statement

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

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

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

先来看第一个语句,这个语句比较简单,array_expression指的是一个数组表达式,as $val语句将顺序取得该数组的值并保存到$val变量中,此种方法只能取得数组内的值,而不能取得数组的下标索引值。例如:

$myArray=array("1"=>"val1","2"=>"val2","3"=>"val3");
foreach($myArray as $val) {
   print($val." ");
}

其结果会输出:val1 val2 val3

再来看看第二种格式,第二种格式除了能像第一种格式一样得到数组内元素的值外,还能得到元素的索引值,并保存到$key变量中,如果数组的索引值未经过人工设定,则返回系统默认的设定值,
看正面例子:

先看一个简单的一维数组:

$myArray=array("1"=>"val1","2"="val2","3"=>"val3");
foreach($myArray as $key=>$val) {
   print($key."=>".$val.";");
}

该程序将出输出:1=>val1;2=>val2;3=>val3;,接下来我们再来看一个复杂一点的二维数组遍历,程序如下:

$myArray=array(
   "1"=>array("11"=>"val11","12"=>"val12","13"=>"val13"),
   "2"=>array("21"=>"val21","22"=>"val22","23"=>"val23"),
   "3"=>array("31"=>"val31","32"=>"val32","33"=>"val33")
);
print("<ul>");
foreach($myArray as $key=>$val) {
   print("<li>".$key."</li>");
   if (is_array($val)) {   //判断$val的值是否是一个数组,如果是,则进入下层遍历
     print("<ul>");
    foreach($val as $key=>$val) {
       print("<li>".$key."=>".$val."</li>");
     }
     print("</ul>");
   }
}
print("</ul>");

输出结果:

1
    11=>val11
    12=>val12
    13=>val13
  2
    21=>val21
    22=>val22
    23=>val23
  3
    31=>val31
    32=>val32
    33=>val33

<ul> 和 <li>是 标签,作用是显示个实心小圆点和空心小圆点。
由于上面的是一个二维数组,在第一次遍历后所得到的$val值将是一个数组,所以我在遍历中加了一个判断,以便进行二层数组遍历。

再通过一个实例解惑

<?php
$a = array("1"=>"语文","2"=>"数学","3"=>"英语");
$b = array("1"=>"95","2"=>"99","3"=>"92");
foreach($a as $key=>$value){
  echo $value;
echo $b[$key]."<br>";
}
?>

问题是为什么输出数组$b中的值要用$b[$key]而不是$b[$value]?

这是为什么呢?

$a = array("1"=>"语文","2"=>"数学","3"=>"英语");
上面这个和下面这个是完全一样的

$a[1]="语文";
$a[2]="数学"
$a[3]=“英语”

我们输出上面的数组是怎么输出的呢?

肯定是echo $a[1];

对不对?

如果没有疑问我们继续!!!!

------------------------------

简单说foreach

它的格式是这样的foreach(数组名 as 下标=>值)

下标也就是上面的$a[1],这里的1就是数组的下标!

到这你应该明白了,为什么是$a[$key]这样输出

你记住不管怎么变,数组的输出方法永远是$a[1],不会是$a['语文']

================================================================

foreach()有两种用法:

1: foreach(array_name as $value){
    statement;
  }

 这里的array_name是你要遍历的数组名,每次循环中,array_name数组的当前元素的值被赋给$value,并且数组内部的下标向下移一步,也就是下次循环回得到下一个元素。

2:foreach(array_name as $key => $value){    
    statement;  
 }

 这里跟第一种方法的区别就是多了个$key,也就是除了把当前元素的值赋给$value外,当前元素的键值也会在每次循环中被赋给变量$key。键值可以是下标值,也可以是字符串。比如book[0]=1中的“0”,book[id]="001"中的“id”.

以上所述就是本文的全部内容了,希望大家能够喜欢。

PHP 相关文章推荐
php google或baidu分页代码
Nov 26 PHP
php smarty模版引擎中的缓存应用
Dec 02 PHP
PHP中uploaded_files函数使用方法详解
Mar 09 PHP
关于mysql字符集设置了character_set_client=binary 在gbk情况下会出现表描述是乱码的情况
Jan 06 PHP
php随机显示图片的简单示例
Feb 15 PHP
ThinkPHP的I方法使用详解
Jun 18 PHP
php cookie中点号(句号)自动转为下划线问题
Oct 21 PHP
PHP的运行机制与原理(底层)
Nov 16 PHP
使用php完成常见的文件上传功能(推荐)
Jan 13 PHP
PHP使用xpath解析XML的方法详解
May 20 PHP
PHP基于迭代实现文件夹复制、删除、查看大小等操作的方法
Aug 11 PHP
总结PHP代码规范、流程规范、git规范
Jun 18 PHP
PHP.ini安全配置检测工具pcc简单介绍
Jul 02 #PHP
PHP输出缓冲控制Output Control系列函数详解
Jul 02 #PHP
PHP中的命名空间详细介绍
Jul 02 #PHP
PHP+JS实现大规模数据提交的方法
Jul 02 #PHP
PHP中iconv函数知识汇总
Jul 02 #PHP
php统计数组元素个数的方法
Jul 02 #PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
Jul 02 #PHP
You might like
让php处理图片变得简单 基于gb库的图片处理类附实例代码下载
2011/05/17 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
2016/01/19 PHP
yii2 开发api接口时优雅的处理全局异常的方法
2019/05/14 PHP
Prototype 学习 工具函数学习($A方法)
2009/07/12 Javascript
javascript &amp;&amp;和||运算法的另类使用技巧
2009/11/28 Javascript
jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR错误
2013/01/11 Javascript
jQuery拖拽插件gridster使用指南
2015/04/21 Javascript
javascript判断并获取注册表中可信任站点的方法
2015/06/01 Javascript
jQueryUI中的datepicker使用方法详解
2016/05/25 Javascript
Bootstrap Modal遮罩弹出层(完整版)
2016/11/21 Javascript
JavaScript对象封装的简单实现方法(3种方法)
2017/01/03 Javascript
原生JS上传大文件显示进度条 php上传文件代码
2020/03/27 Javascript
Angular项目从新建、打包到nginx部署全过程记录
2017/12/09 Javascript
AngularJS实现的生成随机数与猜数字大小功能示例
2017/12/25 Javascript
浅析js中mvvm模式实现的原理
2018/10/06 Javascript
关于Vue Router中路由守卫的应用及在全局导航守卫中检查元字段的方法
2018/12/09 Javascript
node.js Promise对象的使用方法实例分析
2019/12/26 Javascript
[42:22]DOTA2上海特级锦标赛C组小组赛#1 OG VS Archon第一局
2016/02/27 DOTA
Python中的ctime()方法使用教程
2015/05/22 Python
Python编写一个优美的下载器
2018/04/15 Python
Python实现的根据IP地址计算子网掩码位数功能示例
2018/05/23 Python
浅析python3中的os.path.dirname(__file__)的使用
2018/08/30 Python
python中正则表达式 re.findall 用法
2018/10/23 Python
Python获取命令实时输出-原样彩色输出并返回输出结果的示例
2019/07/11 Python
python tkinter库实现气泡屏保和锁屏
2019/07/29 Python
Python Django 前后端分离 API的方法
2019/08/28 Python
奥林匹亚体育:Olympia Sports
2020/12/30 全球购物
优秀通讯员事迹材料
2014/01/28 职场文书
英语教育专业自荐信
2014/05/29 职场文书
学校党员对照检查材料
2014/08/28 职场文书
党员个人查摆剖析材料
2014/10/16 职场文书
2016自主招生教师推荐信范文
2015/03/23 职场文书
2015圣诞节贺卡寄语
2015/03/24 职场文书
2015秋季小学开学寄语
2015/05/27 职场文书
毕业班工作总结
2015/08/10 职场文书
解决 redis 无法远程连接
2022/05/15 Redis