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作的文本留言本的例子(二)
Oct 09 PHP
在服务端进行目录建立、删除,文件上传、删除的过程的php代码
Sep 10 PHP
php 删除记录同时删除图片文件的实现代码
May 12 PHP
php实现批量压缩图片文件大小的脚本
Jul 04 PHP
Yii框架组件和事件行为管理详解
May 20 PHP
php编译安装php-amq扩展简明教程
Jun 25 PHP
自制PHP框架之路由与控制器
May 07 PHP
详解php实现页面静态化原理
Jun 21 PHP
PHP中in_array的隐式转换的解决方法
Mar 06 PHP
PHP排序二叉树基本功能实现方法示例
May 26 PHP
php抽象类和接口知识点整理总结
Aug 02 PHP
laravel 去掉index.php伪静态的操作方法
Oct 12 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学习笔记 IIS7下安装配置php环境
2012/10/29 PHP
Laravel 4 初级教程之安装及入门
2014/10/30 PHP
php通过淘宝API查询IP地址归属等信息
2015/12/25 PHP
php微信高级接口调用方法(自定义菜单接口、客服接口、二维码)
2016/11/28 PHP
jQuery 选择器、DOM操作、事件、动画
2010/11/25 Javascript
《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型
2012/02/27 Javascript
创建公共调用 jQuery Ajax 带返回值
2012/08/01 Javascript
Blocksit插件实现瀑布流数据无限( 异步)加载
2014/06/20 Javascript
js事件源window.event.srcElement兼容性写法(详解)
2016/11/25 Javascript
浅谈jQuery中Ajax事件beforesend及各参数含义
2016/12/03 Javascript
微信小程序 缓存(本地缓存、异步缓存、同步缓存)详解
2017/01/17 Javascript
jquery实时获取时间的简单实例
2017/01/26 Javascript
es6中的解构赋值、扩展运算符和rest参数使用详解
2017/09/28 Javascript
springmvc接收jquery提交的数组数据代码分享
2017/10/28 jQuery
js遍历添加栏目类添加css 再点击其它删除css【推荐】
2018/06/12 Javascript
Element-ui树形控件el-tree自定义增删改和局部刷新及懒加载操作
2020/08/31 Javascript
js+canvas实现刮刮奖功能
2020/09/13 Javascript
[02:51]2014DOTA2 TI小组赛总结中国军团全部进军钥匙球馆
2014/07/15 DOTA
Python中type的构造函数参数含义说明
2015/06/21 Python
Python排序算法实例代码
2017/08/10 Python
python 信息同时输出到控制台与文件的实例讲解
2018/05/11 Python
基于Python开发chrome插件的方法分析
2018/07/07 Python
Django  ORM 练习题及答案
2019/07/19 Python
pyinstaller打包opencv和numpy程序运行错误解决
2019/08/16 Python
Python使用re模块验证危险字符
2020/05/21 Python
html5中canvas图表实现柱状图的示例
2017/11/13 HTML / CSS
英国儿童图书网站:Scholastic
2017/03/26 全球购物
公司办公室岗位职责
2014/03/19 职场文书
保密工作承诺书
2014/08/29 职场文书
党的群众路线教育实践活动个人对照检查剖析材料
2014/09/23 职场文书
世界卫生日宣传活动总结
2015/02/09 职场文书
公司考勤管理制度
2015/08/04 职场文书
《自己去吧》教学反思
2016/02/16 职场文书
如何拟写通知正文?
2019/04/02 职场文书
零基础学java之方法的定义与调用详解
2022/04/10 Java/Android
Mybatis 一级缓存和二级缓存原理区别
2022/09/23 Java/Android