PHP遍历数组

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. $n
    = 0
    ;

  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 不支持用“@”来禁止错误信息的能力。