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 相关文章推荐
开源SNS系统-ThinkSNS
May 18 PHP
一道关于php变量引用的面试题
Aug 08 PHP
PHP学习 变量使用总结
Mar 24 PHP
php批量删除数据库下指定前缀的表以prefix_为例
Aug 24 PHP
10个超级有用的PHP代码片段果断收藏
Sep 23 PHP
使用PHP如何实现高效安全的ftp服务器(二)
Dec 30 PHP
Zend Framework+smarty用法实例详解
Mar 19 PHP
Laravel框架实现的rbac权限管理操作示例
Jan 16 PHP
PHP5中使用mysqli的prepare操作数据库的介绍
Mar 18 PHP
PHP常用函数之获取汉字首字母功能示例
Oct 21 PHP
PHP优化之批量操作MySQL实例分析
Apr 23 PHP
详解Laravel框架的依赖注入功能
May 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开发框架myqee新手快速入门教程
2014/07/14 PHP
详细对比php中类继承和接口继承
2018/10/11 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
JavaScript 学习笔记(十三)Dom创建表格
2010/01/21 Javascript
nodejs npm install全局安装和本地安装的区别
2014/06/05 NodeJs
js调试系列 初识控制台
2014/06/18 Javascript
深入理解JavaScript系列(25):设计模式之单例模式详解
2015/03/03 Javascript
JS+CSS实现带小三角指引的滑动门效果
2015/09/22 Javascript
浅谈javascript中遇到的字符串对象处理
2016/11/18 Javascript
谈谈因Vue.js引发关于getter和setter的思考
2016/12/02 Javascript
获取url中用&amp;隔开的参数实例(分享)
2017/05/28 Javascript
Vue.js列表渲染绑定jQuery插件的正确姿势
2017/06/29 jQuery
jQuery实现为table表格动态添加或删除tr功能示例
2019/02/19 jQuery
vuex vue简单使用知识点总结
2019/08/29 Javascript
three.js利用gpu选取物体并计算交点位置的方法示例
2019/11/25 Javascript
Vue中点击active并第一个默认选中功能的实现
2020/02/24 Javascript
关于angular 8.1使用过程中的一些记录
2020/11/25 Javascript
[01:16:01]VGJ.S vs Mski Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
使用Python制作获取网站目录的图形化程序
2015/05/04 Python
Python导出DBF文件到Excel的方法
2015/07/25 Python
利用python代码写的12306订票代码
2015/12/20 Python
virtualenv实现多个版本Python共存
2017/08/21 Python
python @property的用法及含义全面解析
2018/02/01 Python
Python3利用Dlib19.7实现摄像头人脸识别的方法
2018/05/11 Python
使用Python快乐学数学Github万星神器Manim简介
2019/08/07 Python
详解如何在css中引入自定义字体(font-face)
2018/05/17 HTML / CSS
Snapfish爱尔兰:在线照片打印和个性化照片礼品
2018/09/17 全球购物
指针和引用有什么区别
2013/01/13 面试题
几道数据库的概念性面试题
2014/05/30 面试题
环保倡议书500字
2014/05/15 职场文书
教导主任竞聘演讲稿
2014/05/16 职场文书
校园环保标语
2014/06/13 职场文书
离婚协议书怎么写
2015/01/26 职场文书
2015年个人招商工作总结
2015/04/25 职场文书
解决goland 导入项目后import里的包报红问题
2021/05/06 Golang
vue项目配置sass及引入外部scss文件
2022/04/14 Vue.js