Forum und email

foreach

PHP4 (PHP3 並沒有) 加入了 foreach 的功能。這功能在 PERL 和其他語言中都有。 用它可以很方便地存取陣列。 合法的句式有兩個: 第二個只是對第一個句法作了一點改動但很有用。如下:

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

第一個句式每次循環都會把陣列 array_expression 中的一個元素的值存到變數 $value 中直到陣列中所有的元素用完了。

第二個句式和第一個差不多, 分別在於除了 $value 會儲存了元素的值, $key 還會儲存了目前元素的索引號。

Note: 當 foreach 開始時內置的陣列指標會指向陣列的首個元素的位置。 這代表你不必在每次 foreach 前調用 reset() 函數。

Note: Also note that foreach operates on a copy of the specified array, not the array itself, therefore the array pointer is not modified like with the each construct.

在下面的範例, 你應可看出它們功能是一樣的:

reset ($arr);
while (list(, $value) = each ($arr)) {
    echo "Value: $value<br>\n";
}

foreach ($arr as $value) {
    echo "Value: $value<br>\n";
}
下面的範例也是一樣功能的:
reset ($arr);
while (list($key, $value) = each ($arr)) {
    echo "Key: $key; Value: $value<br>\n";
}

foreach ($arr as $key => $value) {
    echo "Key: $key; Value: $value<br>\n";
}

更多的示範:

/* foreach example 1: value only */

$a = array (1, 2, 3, 17);

foreach ($a as $v) {
   print "Current value of \$a: $v.\n";
}

/* foreach example 2: value (with key printed for illustration) */

$a = array (1, 2, 3, 17);

$i = 0; /* for illustrative purposes only */

foreach($a as $v) {
    print "\$a[$i] => $v.\n";
}

/* foreach example 3: key and value */

$a = array (
    "one" => 1,
    "two" => 2,
    "three" => 3,
    "seventeen" => 17
);

foreach($a as $k => $v) {
    print "\$a[$k] => $v.\n";
}