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. Spark基础与Java Api介绍

    原创文章,转载请注明: 转载自http://www.cnblogs.com/tovin/p/3832405.html  一.Spark简介 1.什么是Spark 发源于AMPLab实验室的分布式内存计 ...

  2. Jquery DataTables warning : Requested unknown from the data source for row 0

    昨天在做 Jquery DataTables 的时候,遇到的一个问题,我使用MVC,在tables上加入了一个actionlink的href.但是在运行起来的时候,报错: DataTables war ...

  3. ios开发--集成银联3.3.0

    项目最近需要集成银联,在网上搜了一下发现都并不是最新版的银联集成教程,自己摸索了一下,总结写了下来. 附上3.3.0的下载网址 https://open.unionpay.com/upload/dow ...

  4. QT 读取文件夹下所有文件(超级简单的方法,不需要QDirIterator)

    之前,用标准C++写过读取文件夹.现在用QT重写代码,顺便看了下QT如何实现,还是相当简单的.主要用到QDir,详细文档可见这里 A program that lists all the files ...

  5. jQuery:balloon气泡提示插件

    插件下载地址:http://file.urin.take-uma.net/jquery.balloon.js-Demo.html <!DOCTYPE html PUBLIC "-//W ...

  6. CentOS6.x 64位下mysql5.5.25安装图解教程

    查看当前安装的linux版本 命令:lsb_release -a 如下图所示 通过上图中的数据可以看出安装的版本为CentOS release 6.3,所以我们需要下载CentOS release 6 ...

  7. 借助adb与gdb确认app内存缓存中是否存在用户敏感数据

    一.环境准备 1. 搭建adb调试桥 可参考文章<ADB调试桥安装(方式二)> 2. 安装调试gdb工具 可参考文章<移动设备中导入gdb调试工具> 二.测试执行 root@G ...

  8. ADB调试桥安装(方式一)

    一.ADB简介 adb的全称为Android Debug Bridge,起到调试桥的作用.它android sdk里的一个工具, 用这个工具可以直接操作管理 android模拟器或者真实的androi ...

  9. Android 广播机制(两种注册方法)与中断广播

    两种注册类型的区别是: 1)第一种不是常驻型广播,也就是说广播跟随activity的生命周期.注意: 在activity结束前,移除广播接收器. 2)第二种是常驻型,也就是说当应用程序关闭后,如果有信 ...

  10. openwrt(路由器)的源码地址

    https://dev.openwrt.org/wiki/GetSource 路由器的源码地址