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 相关文章推荐
session 的生命周期是多长
Oct 09 PHP
PHP 的 __FILE__ 常量
Jan 15 PHP
PHP面向接口编程 耦合设计模式 简单范例
Mar 23 PHP
PHP第一季视频教程(李炎恢+php100 不断更新)
May 29 PHP
php 获取本地IP代码
Jun 23 PHP
学习php过程中的一些注意点的总结
Oct 25 PHP
windows下apache搭建php开发环境
Aug 27 PHP
WordPress中用于更新伪静态规则的PHP代码实例讲解
Dec 18 PHP
PHP常用技巧汇总
Mar 04 PHP
PHP弱类型语言中类型判断操作实例详解
Aug 10 PHP
PHP自定义错误处理的方法分析
Dec 19 PHP
asp函数split()对应php函数explode()
Feb 27 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 4.2书写安全的脚本
2006/10/09 PHP
Smarty中调用FCKeditor的方法
2014/10/27 PHP
微信开发之网页授权获取用户信息(二)
2016/01/08 PHP
破除网页鼠标右键被禁用的绝招大全
2006/12/27 Javascript
javascript 从if else 到 switch case 再到抽象
2010/07/17 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
2013/09/02 Javascript
JS定时器实例详细分析
2013/10/11 Javascript
jQuery函数map()和each()介绍及异同点分析
2014/11/08 Javascript
jquery实现一个简单的表单验证实例
2016/03/30 Javascript
jquery+ajax实现直接提交表单实例分析
2016/06/17 Javascript
jQuery获取浏览器类型和版本号的方法
2016/07/05 Javascript
利用select实现年月日三级联动的日期选择效果【推荐】
2016/12/13 Javascript
nodejs连接mysql数据库简单封装示例-mysql模块
2017/04/10 NodeJs
详解微信小程序实现WebSocket心跳重连
2018/07/31 Javascript
antd组件Upload实现自己上传的实现示例
2018/12/18 Javascript
使用jQuery如何写一个含验证码的登录界面
2019/05/13 jQuery
bootstrap table插件动态加载表头
2019/07/19 Javascript
js 根据对象数组中的属性进行排序实现代码
2019/09/12 Javascript
微信小程序 wxParse插件显示视频问题
2019/09/27 Javascript
Python中dictionary items()系列函数的用法实例
2014/08/21 Python
python 异常处理总结
2016/10/18 Python
Python多进程与服务器并发原理及用法实例分析
2018/08/21 Python
Flask框架web开发之零基础入门
2018/12/10 Python
python实现对服务器脚本敏感信息的加密解密功能
2019/08/13 Python
基于TensorFlow中自定义梯度的2种方式
2020/02/04 Python
python 一维二维插值实例
2020/04/22 Python
python中四舍五入的正确打开方式
2021/01/18 Python
CSS3样式linear-gradient的使用实例
2017/01/16 HTML / CSS
CSS3制作日历实现代码
2012/01/21 HTML / CSS
《水乡歌》教学反思
2014/04/24 职场文书
大一新生期末自我评价
2014/09/12 职场文书
奉献家乡演讲稿
2014/09/16 职场文书
实习单位指导教师评语
2014/12/30 职场文书
机关干部纪律作风整顿心得体会
2016/01/23 职场文书
如何撰写创业策划书
2019/06/27 职场文书
Python数据处理的三个实用技巧分享
2022/04/01 Python