foreach()
PHP の foreach() 構文構造は、操作または出力配列の走査に使用されます。foreach() は、配列またはオブジェクトの走査にのみ使用できます。他のデータ型または初期化されていない変数に使用しようとすると、エラーが発生します。
文法:
foreach (array as $value) statement // 或者: foreach (array as $key => $value) statement
上記の構文では、各ループは現在の単位の値を $value に代入し、配列内のポインターを 1 ステップ前に移動します。 2 番目の構文形式では、現在のユニットのキー名も各ループの変数 $key に割り当てられます。
例:
<?php $arr_age = array("wang"=>18, "li"=>20, "zhang"=>25); foreach ($arr_age as $age) { echo $age,'<br />'; } ?>
この例を実行した場合の出力:
18 20 25
配列キーを使用する
<?php $arr_age = array("wang"=>18, "li"=>20, "zhang"=>25); foreach ($arr_age as $key=>$age) { echo $key,': ',$age,'<br />'; } ?>
例の実行の出力:
wang: 18 li: 20 zhang: 25
foreach の実行が開始されると、配列内のポインターは自動的に最初の要素を指します。これは、foreach ループの前にreset() を呼び出す必要がないことを意味します。
Foreach は、配列自体ではなく、指定された配列のコピーを操作します。返された配列要素を変更しても、元の配列には影響しません (以下の例を参照)。ただし、foreach ループが最後まで実行されると、元の配列の内部ポインターは配列の末尾を指すようになります。
<?php $arr_age = array("wang"=>18, "li"=>20, "zhang"=>25); foreach ($arr_age as $age) { $age = $age+10; echo $age,'<br />'; } // 输出原数组 print_r($arr_age); ?>
例の実行の出力:
28 30 35 Array ( [wang] => 18 [li] => 20 [zhang] => 25 )
foreach の元の配列要素を変更するには、上記の例を次のように変更します。
<?php $arr_age = array("wang"=>18, "li"=>20, "zhang"=>25); foreach ($arr_age as &$age) { $age = $age+10; echo $age,'<br />'; } // 输出原数组 print_r($arr_age); ?>
18 20 25 Array ( [wang] => 28 [li] => 30 [zhang] => 35 )
多次元配列を走査する
foreach 構文構造は、1 次元配列を走査する場合にのみ使用できます。多次元配列を走査するには、通常、foreach ネストされた再帰を使用するか、元の配列を 1 次元配列に分割してから foreach 走査を実行します。
1 次元配列と 2 次元配列の混合の例:
<?php $arr_age = array("wang"=>18, "li"=>20, "zhang"=>array("name"=>"小张", "age"=>25)); foreach ($arr_age as $age) { if(is_array($age)){ foreach ( $age as $detail) { echo $detail,'<br />'; } } else { echo $age,'<br />'; } } ?>
多次元配列を走査するための最も適切な処理方法は、実際のデータ構造に基づいている必要があります。
for() は配列をループします
連続キー値の配列を操作している場合は、for() ループを使用して配列を走査することもできます。
<?php $arr_age = array(18, 20, 25); $num = count($arr_age); for($i = 0; $i < $num; $i++){ echo $arr_age[$i]."<br />"; } ?>