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
一个域名查询的程序
Oct 09 PHP
PHP 编程请选择正确的文本编辑软件
Dec 21 PHP
POSIX 风格和兼容 Perl 风格两种正则表达式主要函数的类比(preg_match, preg_replace, ereg, ereg_replace)
Oct 12 PHP
php经典算法集锦
Nov 14 PHP
优化WordPress的Google字体以加速国内服务器上的运行
Nov 24 PHP
php实现的简单数据库操作Model类
Nov 16 PHP
PHP与jquery实时显示网站在线人数实例详解
Dec 02 PHP
浅谈htmlentities 、htmlspecialchars、addslashes的使用方法
Dec 09 PHP
php实现文件管理与基础功能操作
Mar 21 PHP
Ubuntu 16.04下安装PHP 7过程详解
Mar 28 PHP
PHP实现图片防盗链破解操作示例【解决图片防盗链问题/反向代理】
May 29 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
thinkphp模板输出技巧汇总
2014/11/24 PHP
Php-Redis安装测试笔记
2015/03/05 PHP
学习php设计模式 php实现合成模式(composite)
2015/12/08 PHP
PHP微信开发之有道翻译
2016/06/23 PHP
PHP的反射机制实例详解
2017/03/29 PHP
javascript入门·对象属性方法大总结
2007/10/01 Javascript
在IE上直接编辑网页内容的js代码(IE地址栏js)
2009/04/27 Javascript
通过正则格式化url查询字符串实现代码
2012/12/28 Javascript
javascript中自定义对象的属性方法分享
2013/07/12 Javascript
深入理解JavaScript高级之词法作用域和作用域链
2013/12/10 Javascript
jQuery中odd选择器的定义和用法
2014/12/23 Javascript
浅谈javascript函数式编程
2015/09/06 Javascript
JS和jQuery通过this获取html标签中的属性值(实例代码)
2017/09/11 jQuery
微信小程序实现验证码获取倒计时效果
2018/02/08 Javascript
vue2.0.js的多级联动选择器实现方法
2018/02/09 Javascript
详解原生JS回到顶部
2019/03/25 Javascript
JS实现的自定义map方法示例
2019/05/17 Javascript
详解Vue的mixin策略
2020/11/19 Vue.js
python计算文本文件行数的方法
2015/07/06 Python
使用Python对Excel进行读写操作
2017/03/30 Python
django+js+ajax实现刷新页面的方法
2017/05/22 Python
python os用法总结
2018/06/08 Python
浅析python3中的os.path.dirname(__file__)的使用
2018/08/30 Python
对python实现合并两个排序链表的方法详解
2019/01/23 Python
Python简直是万能的,这5大主要用途你一定要知道!(推荐)
2019/04/03 Python
Python整数与Numpy数据溢出问题解决
2019/09/11 Python
台湾饭店和机票预订网站:Expedia台湾
2016/08/05 全球购物
日本最大的眼镜购物网站:Oh My Glasses
2016/11/13 全球购物
迪卡侬荷兰官网:Decathlon荷兰
2017/10/29 全球购物
物流管理应届生求职信
2013/11/07 职场文书
幼儿园毕业园长感言
2014/02/24 职场文书
函授生自我鉴定
2014/03/25 职场文书
结婚保证书(三从四德)
2015/02/26 职场文书
信息技术课教学反思
2016/02/23 职场文书
html输入两个数实现加减乘除功能
2021/07/01 HTML / CSS
MySQL如何快速创建800w条测试数据表
2022/03/17 MySQL