这篇文章主要给大家详细介绍了PHP中foreach()用法以及相关的示例,十分的细致,有需要的小伙伴可以参考下。

  PHP 4 引入了 foreach 结构,和 Perl 以及其他语言很像。这只是一种遍历数组简便方法。foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。有两种语法,第二种比较次要但却是第一种的有用的扩展。

  ?

  1

  2

  3

  4

  5foreach (array_expression as $value)

  statement

  foreach (array_expression as $key => $value)

  statement

  第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。

  第二种格式做同样的事,只是除了当前单元的键名也会在每次循环中被赋给变量 $key。

  先来看第一个语句,这个语句比较简单,array_expression指的是一个数组表达式,as $val语句将顺序取得该数组的值并保存到$val变量中,此种方法只能取得数组内的值,而不能取得数组的下标索引值。例如:

  ?

  1

  2

  3

  4$myArray=array("1"=>"val1","2"=>"val2","3"=>"val3");

  foreach($myArray as $val) {

  print($val." ");

  }

  其结果会输出:val1 val2 val3

  再来看看第二种格式,第二种格式除了能像第一种格式一样得到数组内元素的值外,还能得到元素的索引值,并保存到$key变量中,如果数组的索引值未经过人工设定,则返回系统默认的设定值,

  看正面例子:

  先看一个简单的一维数组:

  ?

  1

  2

  3

  4$myArray=array("1"=>"val1","2"="val2","3"=>"val3");

  foreach($myArray as $key=>$val) {

  print($key."=>".$val.";");

  }

  该程序将出输出:1=>val1;2=>val2;3=>val3;,接下来我们再来看一个复杂一点的二维数组遍历,程序如下:

  ?

  17$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("

      ");

  foreach($myArray as $key=>$val) {

  print("

    • ".$key."
    • ");

  if (is_array($val)) { //判断$val的值是否是一个数组,如果是,则进入下层遍历

  print("

        ");

  foreach($val as $key=>$val) {

  print("

      • ".$key."=>".$val."
      • ");

  }

  print("

      ");

  }

  }

  print("

");

  输出结果:

  ?

  121

  11=>val11

  12=>val12

  13=>val13

  2

  21=>val21

  22=>val22

  23=>val23

  3

  31=>val31

  32=>val32

  33=>val33

  

和 是 标签,作用是显示个实心小圆点和空心小圆点。

  由于上面的是一个二维数组,在第一次遍历后所得到的$val值将是一个数组,所以我在遍历中加了一个判断,以便进行二层数组遍历。

  再通过一个实例解惑

  ?

  $a = array("1"=>"语文","2"=>"数学","3"=>"英语");

  $b = array("1"=>"95","2"=>"99","3"=>"92");

  foreach($a as $key=>$value){

  echo $value;

  echo $b[$key]."
";

  }

  ?>

  问题是为什么输出数组$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

  2

  31: foreach(array_name as $value){

  statement;

  }

  这里的array_name是你要遍历的数组名,每次循环中,array_name数组的当前元素的值被赋给$value,并且数组内部的下标向下移一步,也就是下次循环回得到下一个元素。

  ?

  1

  2

  32:foreach(array_name as $key => $value){

  statement;

  }

  这里跟第一种方法的区别就是多了个$key,也就是除了把当前元素的值赋给$value外,当前元素的键值也会在每次循环中被赋给变量$key。键值可以是下标值,也可以是字符串。比如book[0]=1中的“0”,book[id]="001"中的“id”.

PHP中foreach()用法汇总的更多相关文章

  1. Hibernate 注解中CascadeType用法汇总

    这两天,参加一个课程设计,同时这个项目又作为一个模块镶嵌到其他项目中,考虑如此,应与原先的架构相同,因牵扯到留言和相互@功能,故数据库之间OneToOne,OneToMany,ManyToMany之风 ...

  2. C#中DllImport用法汇总

    最近使用DllImport,从网上google后发现,大部分内容都是相同,又从MSDN中搜集下,现将内容汇总,与大家分享. 大家在实际工作学习C#的时候,可能会问:为什么我们要为一些已经存在的功能(比 ...

  3. PHP中FOREACH()用法

    PHP 4 引入了 foreach 结构,和 Perl 以及其他语言很像.这只是一种遍历数组简便方法.foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误. 1. ...

  4. *ecshop 模板中foreach用法详解

    1.foreach分以下几个参数 from, item, name, iteration, index 2.使用foreach循环      如果php要传递一个数组(如:$array)给ecshop ...

  5. Java中foreach用法,增强型的for循环的样例和解释

    JDK1.5加入的增强for和循环. 这段时间又回顾了一下JAVA基础 foreach语句使用总结 增强for(part1:part2){part3}; part2中是一个数组对象,或者是带有泛性的集 ...

  6. PHP中foreach用法详细讲解

    1.foreach是什么? foreach是PHP的一种语法结构,其实就是一个工具,(工具:就是工作的时候用到的器具),那么在程序开发过程中,为了达到程序效果,就用到了foreach. 2.如何用? ...

  7. ecshop中foreach的详细用法归纳

    ec模版中foreach的常见用法. foreach 语法: 假如后台:$smarty->assign('test',$test); {foreach from=$test item=list ...

  8. mybatis中foreach的用法(转)

    foreach一共有三种类型,分别为List,[](array),Map三种. foreach属性 属性 描述 item 循环体中的具体对象.支持属性的点路径访问,如item.age,item.inf ...

  9. Linux中find命令的用法汇总

    Linux中find命令的用法汇总 https://www.jb51.net/article/108198.htm

随机推荐

  1. 201521123090《Java程序设计》第10周学习总结

    本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 书面作业 本次PTA作业题集异常.多线程 finally 题目4-2 1.1 截图你的提交结果(出现学号) 1.2 ...

  2. What is uClinux?

    What is uClinux? The original uClinux was a derivative of Linux 2.0 kernel intended for microcontrol ...

  3. 笔记2 linux多线程 读写锁

    //read write lock #include<stdio.h> #include<unistd.h> #include<pthread.h> struct ...

  4. 读取指定excel,修改并某个值并另存到指定路径

    HSSFWorkBook是解析excel2007以前的版本(xls)之后的版本使用XSSFWrokBook(xlsx) 附:处理excel2007之后的版本代码: package gbyp.autoQ ...

  5. Spring - 运行时获取bean(ApplicationContextAware接口)

    默认情况下,我们的bean都是单例模式(即从容器初始化到销毁只保持一个实例).当一个bean需要引用另外一个bean,我们往往会通过bean属性的方式通过依赖注入来引用另外一个bean.那么问题就来了 ...

  6. java的Date类和TimeStamp类

    Java API中有两个Date类,一个是java.util.Date,其构造方法如下: Date() Date(long date) 主要方法有: boolean after(Date when) ...

  7. Mybatis学习(三)XML配置文件之mybatis-config.xml

    1.MyBatis的配置文件结构 1.1 properties 这些是外部化的,可替代的属性,这些属性也可以配置在典型的 Java 属性配置文件中,或者通过 properties 元素的子元素来传递. ...

  8. 为什么要用深度学习来做个性化推荐 CTR 预估

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:苏博览 深度学习应该这一两年计算机圈子里最热的一个词了.基于深度学习,工程师们在图像,语音,NLP等领域都取得了令人振奋的进展.而深 ...

  9. Linux入门之常用命令(8)上传下载

    [什么是rz/sz (lsz/lrz)]  简单说就是,可以很方便地用这两个sz/rz工具,实现Linux下和Windows之间的文件传输(发送和接收),速度大概为10KB/s,适合中小文件.rz/s ...

  10. DIY智能家居——零基础入门篇

    概要 本文主要根据笔者从零开始接触硬件,以小白视角开启IoT探索,根据相关资料DIY一个温湿度传感器.后经过探索发现新大陆--Home Assistant&Homebridge,最终实现了一个 ...