foreach

PHP代码:
  1. <?php
  2.  
  3. $url = array( '新浪' =>'www.sina.com' ,
  4.                    '雅虎' =>'www.yahoo.com' ,
  5.                    '网易' =>'www.163.com' ,
  6.                    '腾讯' =>'www.qq.com' ,
  7.                    '百度' =>'www.baidu.com'
  8.                ) ;
  9.  
  10. foreach (   $url as $link ) {
  11.  
  12.   echo$link .'<br><br>' ;
  13.  
  14. }
  15.  
  16. ?>

  上面的代码中我们用到了 foreach 语句,这是一个用来遍历数组中数据的最简单有效的方法。

foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。有两种语法,第二种比较次要但却是第一种的有用的扩展。

第一种语法:

foreach (array_expression as $value) statement

这种格式遍历给定的 array_expression 数组,as 是关键词。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。statement 是后续操作,如果有多个语句,你可以象上例那样采用大括号包含。

上例中,我们循环读取数组$url 中的每个单元,并且每次都把该单元的值赋值给变量$link ,再echo 打印输出这个$link 的值,然后再进行下一次循环直到数组中不再有数据。

你动手试了吗?如果你试了,看到输出结果是不是觉得很有趣呢?我知道一会儿你就又有疑问了:为什么没有“新浪”“网易”这样的站名呢?要怎样做才能得到呢?

在$url 数组定义中,“新浪”“网易”等都是作的键名而不是数组的值,我们的第一种语法只是循环取得数组中每个值。如果要得到数组的键名,可以采用第二种语法:

第二种语法: 

foreach (array_expression as $key => $value) statement

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

例如10-2:

PHP代码:
  1. <?php
  2.  
  3. $url = array( '新浪' =>'www.sina.com' ,
  4.                    '雅虎' =>'www.yahoo.com' ,
  5.                    '网易' =>'www.163.com' ,
  6.                    '腾讯' =>'www.qq.com' ,
  7.                    '百度' =>'www.baidu.com'
  8.                ) ;
  9.  
  10. foreach (   $url as $site => $link ) {
  11.  
  12.   echo"<a href=http://$link>$site</a><br><br>" ;
  13.  
  14. }
  15.  
  16. ?>

  $site 得到键值(如“新浪 ”),$link 得到该单元的值(如“www.sina.com ”),我在中间夹了一些HTML代码,相信你会看懂的。下面我再加点东西你能看懂吗?例10-3:

PHP代码:
  1. <?php
  2.  
  3. $url = array( '新浪' =>'www.sina.com' ,
  4.                    '雅虎' =>'www.yahoo.com' ,
  5.                    '网易' =>'www.163.com' ,
  6.                    '腾讯' =>'www.qq.com' ,
  7.                    '百度' =>'www.baidu.com'
  8.                ) ;
  9.  
  10.  ;
  11.  
  12. foreach (   $url as $site => $link ) {
  13.  
  14.   ++$n ;
  15.  
  16.   echo"第 $n  名:<a href=http://$link>$site</a><br><br>" ;
  17.  
  18. }
  19.  
  20. ?>

注: 当 foreach 开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在 foreach 循环之前调用 reset() 。

注: 此外注意 foreach 所操作的是指定数组的一个拷贝,而不是该数组本身。因此即使有 each() 的构造,原数组指针也没有变,数组单元的值也不受影响。

注: foreach 不支持用“@”来禁止错误信息的能力。

PHP遍历数组的更多相关文章

  1. *使用while循环遍历数组创建索引和自增索引值

    package com.chongrui.test;/* *使用while循环遍历数组 *  *  * */public class test {    public static void main ...

  2. nodejs 遍历数组的两种方法

    var array = [1,2,3]; array.forEach(function(v,i,a){ console.log(v); console.log(i); console.log(a); ...

  3. 原生js使用forEach()与jquery使用each遍历数组,return false 的区别

    原生js使用forEach()与jquery使用each()遍历数组,return false 的区别: 1.使用each()遍历数组a,如下: var a=[20,21,22,23,24]; $.e ...

  4. js中数组遍历for与for in区别(强烈建议不要使用for in遍历数组)

    js中遍历数组的有两种方式 var array=['a'] //标准的for循环 for(var i=1;i<array.length;i++){ alert(array[i]) } //for ...

  5. 以forin的方式遍历数组时进行删除操作的注意点

    今天在修改某项需求的时候,需要在遍历的时候将匹配项移除掉,采用的时forin的方式遍历,然后运行的时候却crash掉了 for (NSString*str in self.btnArray) { if ...

  6. 使用for循环遍历数组

    package review20140419;/* * 遍历数组 */public abstract class Test1 {    //程序入口    public static void mai ...

  7. php 中遍历数组时使用引用出现的问题

    今天在使用foreach遍历数组时发现,当使用&时会出现问题: $arr = array( array('id' => 100, 'error'=> 'aa'), array('i ...

  8. Java:JSTL遍历数组,List,Set,Map

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  9. js遍历数组的错误方法

    for (var index in myArray) { // don't actually do this console.log(myArray[index]); } 缺点: 数组的索引值inde ...

  10. jquery 遍历 数组1

    使用了jquery有段时间了,整理下jquery中的遍历问题. 1.jquery 遍历对象 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Tr ...

随机推荐

  1. Arraylist和Vector的区别与HashMap和Hashtable的区别

    1.ArrayList和HashMap都是线程异步的,所以它们的特点是效率高,但是安全性低: 2.Vector和Hashtable都是线程同步的,所以它们的特点是效率低,但是安全性高.

  2. jQuery常见面试题(转)

    代码以jQuery 1.83 为例 一 :Q: What is the difference between .get(), [], and .eq()? A: eq返回原生jQuery对象,截取某些 ...

  3. Data Flow ->> Fuzzy Lookup & Fuzzy Grouping

    这两个任务的作用是数据清洗(Data Cleansing). Fuzzy Lookup通过引用另外一张数据库表或者索引来进行相似值匹配.这种组件对于标准化和查找可能错误的客户端数据非常有用.例如像地址 ...

  4. Spring Loaded is a JVM agent for reloading class file changes

    <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot ...

  5. OpenGL基础知识

    基本概念 透视(Perspective)变换(Transformation)投影矩阵(Projection Matrix):用于将3D坐标转换为2D屏幕坐标光栅化(Rasterization): 实际 ...

  6. MyEclipse配置Tomcat 并编写第一个JSP程序

    安装myeclipse之后配置tomcat服务器,在window里选择servers 选择tomcat的文件夹路径(我的是从别人那里考过来的文件夹) 选中上enable即可 出现了这个界面 在这里可以 ...

  7. C# 文本文件打印类库(C#)

    我写了一个打印文本文件的类库,功能包括:打印预览.打印.打印时可以选择打印机,可以指定页码范围.调用方法非常简单:TextFilePrinter p = new TextFilePrinter(tbx ...

  8. Oracle INV - SO line backorder API

    --Sales Order Lines to backorder API--===================================--SET serveroutput on size ...

  9. leetcode:Rectangle Area

    Find the total area covered by two rectilinear rectangles in a 2D plane. Each rectangle is defined b ...

  10. hibernate工具类HibernateUtil详解

    1.为什么要用hibernateUtil这个类,先看这段代码:     //加载配置文件信息默认为hiberna.cfg.xml,如果不是的话那么就在config()方法里面去解析他      Con ...