PHP マニュアル
前のページ | 第 12 章 制御構造 | 次のページ

# `foreach`

(PHP 3ではなく)PHP 4には、Perlや他の言語とよく似た `foreach`構文があります。これにより 配列要素に関する反復処理が容易になります。この構造には、 2種類の構文があります。2番目の構文はあまり知られていませんが、 最初の構文の便利な拡張になっています。

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

最初の形式は、`array_expression`で指定した配列に 関してループ処理を行います。各ループにおいて現在の要素の値が `$value`に代入され、内部配列ポインタが一つ前に 進められます。(よって、次のループでは次の要素を見ることになります。)

2番目の形式も同様ですが、各ループで現在の要素のキーが変数 `$key`に代入されるところが異なります。

> 注意 `foreach`の実行開始時に内部配列ポインタは、 配列の先頭要素を指すように自動的にリセットされます。 このため、`foreach`ループの前に reset()をコールする必要はありません。

> 注意 `foreach`は、指定した配列自体に対してではなく、 そのコピーに対して処理を行うことに注意して下さい。このため、 each() 文のように配列のポインタ位置が変更され ることはなく、返される配列要素への変更は、元の配列には反映されま せん。

> 注意 `foreach` は、'@' によりエラーメッセージ出力を抑 制する機能をサポートしていません。

既にご存知かと思いますが、以下の文は機能的に等価です。

    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 の例 1: 値のみ */

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

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

    /* foreachの例2: 値 (説明用にキーを出力) */

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

    $i = 0; /* 説明用 */

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

    /* foreachの例3: キーと値 */

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

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

    /* foreach の例4: 多次元配列 */

    $a[0][0] = "a";
    $a[0][1] = "b";
    $a[1][0] = "y";
    $a[1][1] = "z";

    foreach($a as $v1) {
        foreach ($v1 as $v2) {
            print "$v2\n";
        }
    }

    /* foreach の例5: 動的配列 */

    foreach(array(1, 2, 3, 4, 5) as $v) {
        print "$v\n";
    }

前のページ | ホーム | 次のページ
`for` | 上に戻る | `break`