Hot For Coding
PHP特定函数foreach的用法

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

// Nicholas Lee www.qttc.net

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

第一种格式遍历给定的array_expression数组。每次循环中,当前单元的值被赋给 $value并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。 第二种格式做同样的事,只是除了当前单元的键名也会在每次循环中被赋给变量 $key。

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

// Nicholas Lee www.qttc.net

$myArray = array("1"=>"val1","2"=>"val2","3"=>"val3");
 
foreach($myArray as $val) {
  echo $val."<br />";
}

执行结果:

val1
val2
val3

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

$myArray = array("1"=>"val1","2"=>"val2","3"=>"val3");
foreach($myArray as $key=>$val) {
  echo $key."=>".$val."<br />";
}

执行结果:

1=>val1
2=>val2
3=>val3

接下来我们再来看一个复杂一点的二维数组遍历,程序如下:

// Nicholas Lee www.qttc.net

$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")
);
 
echo "<ul>";
foreach($myArray as $key=>$val) {
  echo "<li>".$key."</li>";
  //判断$val的值是否是一个数组,如果是,则进入下层遍历
  if (is_array($val)) {     
    echo "<ul>";
      foreach($val as $key=>$val) {
      echo "<li>".$key."=>".$val."</li>";
    }
    echo "</ul>";
  }
}
 
echo "</ul>";

执行结果:

full

<ul><li>是标签,作用是显示个实心小圆点和空心小圆点。 由于上面的是一个二维数组,在第一次遍历后所得到的$val值将是一个数组,所以我在遍历中加了一个判断,以便进行二层数组遍历。

再通过一个实例解惑:

// Nicholas Lee www.qttc.net

$a = array("1"=>"语文","2"=>"数学","3"=>"英语"); 
$b = array("1"=>"95","2"=>"99","3"=>"92"); 
foreach($a as $key=>$value){ 
  echo $value; 
  echo $b[$key]."<br>";
}

执行结果:

语文95
数学99
英语92

问题是为什么输出数组$b中的值要用$b[$key]而不是$b[$value]? why?

// Nicholas Lee www.qttc.net

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

上面这个和下面这个是完全一样的

// Nicholas Lee www.qttc.net

$a[1] = "语文";
$a[2] = "数学";
$a[3] = "英语";

我们输出上面的数组元素是怎么输出的呢? 肯定是

// Nicholas Lee www.qttc.net

echo $a[1];
echo $a[2];
echo $a[3];

对不对?简单说foreach 它的格式是这样的

foreach(数组名 as 下标=>值)

下标也就是上面的$a[1],这里的1就是数组的下标! 到这你应该明白了,为什么是$a[$key]这样输出。

TITLE: PHP特定函数foreach的用法

LINK: https://www.qttc.net/9_php_foreach_specific.html

NOTE: 转载内容请注明出处