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 相关文章推荐
smtp邮件发送一例
Oct 09 PHP
在yii中新增一个用户验证的方法详解
Jun 20 PHP
php对数组排序的简单实例
Dec 25 PHP
PHP与MYSQL中UTF8 中文排序示例代码
Oct 23 PHP
php多次include后导致全局变量global失效的解决方法
Feb 28 PHP
php根据日期或时间戳获取星座信息和生肖等信息
Oct 20 PHP
PHP实现将MySQL重复ID二维数组重组为三维数组的方法
Aug 01 PHP
php 数组元素快速去重
May 05 PHP
PHP+Session防止表单重复提交的解决方法
Apr 09 PHP
微信公众号开发之获取位置信息php代码
Jun 13 PHP
PHP中PCRE正则解析代码详解
Apr 26 PHP
PHP高并发和大流量解决方案整理
Dec 24 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 时间转换Unix时间戳代码
2010/01/22 PHP
smarty模板嵌套之include与fetch性能测试
2010/12/05 PHP
php实现网页上一页下一页翻页过程详解
2019/06/28 PHP
JavaScript 继承详解(三)
2009/07/13 Javascript
jquery动画3.创建一个带遮罩效果的图片走廊
2012/08/24 Javascript
jquery在项目中做复选框时遇到的一些问题笔记
2013/11/17 Javascript
判断文档离浏览器顶部的距离的方法
2014/01/08 Javascript
jquery 无限级下拉菜单的简单实现代码
2014/02/21 Javascript
jquery实现带二级菜单的导航示例
2014/04/28 Javascript
JavaScript控制网页层收起和展开效果的方法
2015/04/15 Javascript
jquery实现在网页指定区域显示自定义右键菜单效果
2015/08/25 Javascript
跟我学习javascript的全局变量
2015/11/16 Javascript
js实现滚动条滚动到页面底部继续加载
2015/12/19 Javascript
详解JavaScript设计模式开发中的桥接模式使用
2016/05/18 Javascript
总结在前端排序中遇到的问题
2016/07/19 Javascript
javascript 作用于作用域链的详解
2017/09/27 Javascript
jQuery+ajax实现动态添加表格tr td功能示例
2018/04/23 jQuery
一个因@click.stop引发的bug的解决
2019/01/08 Javascript
Vue.js实现备忘录功能
2019/06/26 Javascript
Vue仿微信app页面跳转动画效果
2019/08/21 Javascript
[07:12]2014DOTA2西雅图国际邀请赛 黑马Liquid专题采访
2014/07/12 DOTA
Python实现抓取网页并且解析的实例
2014/09/20 Python
kNN算法python实现和简单数字识别的方法
2014/11/18 Python
在Django同1个页面中的多表单处理详解
2017/01/25 Python
在PyTorch中Tensor的查找和筛选例子
2019/08/18 Python
Python批量启动多线程代码实例
2020/02/18 Python
Python GUI编程学习笔记之tkinter界面布局显示详解
2020/03/30 Python
python中wx模块的具体使用方法
2020/05/15 Python
Python 利用Entrez库筛选下载PubMed文献摘要的示例
2020/11/24 Python
细说CSS3中的选择符
2008/10/17 HTML / CSS
万能检讨书
2015/01/27 职场文书
杜甫草堂导游词
2015/02/03 职场文书
爱心捐助活动总结
2015/05/09 职场文书
读鲁迅先生的经典名言
2019/08/20 职场文书
使用nginx动态转换图片大小生成缩略图
2021/03/31 Servers
MyBatis 动态SQL全面详解
2021/10/05 MySQL