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脚本的10个技巧(2)
Oct 09 PHP
php框架Phpbean说明
Jan 10 PHP
PHP简单系统数据添加以及数据删除模块源文件下载
Jun 07 PHP
Server.HTMLEncode让代码在页面里显示为源代码
Dec 08 PHP
用php简单实现加减乘除计算器
Jan 06 PHP
php生成图片验证码的实例讲解
Aug 03 PHP
详解PHP中的null合并运算符
Dec 30 PHP
Zend Framework动作助手Url用法详解
Mar 05 PHP
PHP连接数据库实现注册页面的增删改查操作
Mar 27 PHP
php 截取GBK文档某个位置开始的n个字符方法
Mar 08 PHP
ThinkPHP实现图片上传操作的方法详解
May 08 PHP
PHP连接sftp并下载文件的方法教程
Aug 26 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
实现 win2003 下 mysql 数据库每天自动备份
2006/12/06 PHP
php中jpgraph类库的使用介绍
2013/08/08 PHP
PHP产生不重复随机数的5个方法总结
2014/11/12 PHP
PHP实现将textarea的值根据回车换行拆分至数组
2015/06/10 PHP
Zend Framework教程之Zend_Controller_Plugin插件用法详解
2016/03/07 PHP
JavaScript的9个陷阱及评点分析
2008/05/16 Javascript
jQuery表格行换色的三种实现方法
2011/06/27 Javascript
jquery预加载图片的方法
2015/05/27 Javascript
avalon js实现仿微博拖动图片排序
2015/08/14 Javascript
jQuery+CSS实现一个侧滑导航菜单代码
2016/05/09 Javascript
react性能优化达到最大化的方法 immutable.js使用的必要性
2017/03/09 Javascript
react-router实现按需加载
2017/05/09 Javascript
vue中配置mint-ui报css错误问题的解决方法
2017/10/11 Javascript
vue复合组件实现注册表单功能
2017/11/06 Javascript
webpack学习教程之前端性能优化总结
2017/12/05 Javascript
使用PreloadJS加载图片资源的基础方法详解
2020/02/03 Javascript
vue项目打包之开发环境和部署环境的实现
2020/04/23 Javascript
vue 调用 RESTful风格接口操作
2020/08/11 Javascript
[40:53]完美世界DOTA2联赛PWL S3 Magma vs DLG 第二场 12.18
2020/12/20 DOTA
python读写文件操作示例程序
2013/12/02 Python
通过5个知识点轻松搞定Python的作用域
2016/09/09 Python
详谈python http长连接客户端
2017/06/12 Python
Python HTML解析器BeautifulSoup用法实例详解【爬虫解析器】
2019/04/05 Python
Python参数类型以及常见的坑详解
2019/07/08 Python
浅谈Python2之汉字编码为unicode的问题(即类似\xc3\xa4)
2019/08/12 Python
使用Python爬虫爬取小红书完完整整的全过程
2021/01/19 Python
详解HTML5中div和section以及article的区别
2015/07/14 HTML / CSS
国外最大的眼镜网站:Coastal
2017/08/09 全球购物
Merchant 1948澳大利亚:新西兰领先的鞋类和靴子供应商
2018/03/24 全球购物
Groupon法国官方网站:特卖和网上购物高达-70%
2019/09/02 全球购物
公司培训心得体会
2014/01/03 职场文书
运动会广播稿100字
2014/01/11 职场文书
大学生入党积极分子自我评价
2014/09/20 职场文书
营运督导岗位职责
2015/04/10 职场文书
班主任开场白
2015/06/01 职场文书
学生会工作感言
2015/08/07 职场文书