(PHP 4、PHP 5)
foreach コンストラクトは、配列を反復処理する簡単な方法を提供します。 foreach は配列とオブジェクトに対してのみ機能し、異なるデータ型または初期化されていない変数に対して使用しようとするとエラーが発生します。 変数。 2 つの構文があります:
リーリー最初の形式は、array_expression で指定された配列をループします。各反復で、現在の要素の値が $value に割り当てられ、内部配列ポインターが 1 つ進みます (次の反復では、 次の要素が表示されます)。
2 番目の形式では、反復ごとに現在の要素のキーを $key 変数にさらに割り当てます。
オブジェクトの反復をカスタマイズすることが可能です。
注:
foreach が初めて実行を開始すると、内部配列ポインターは配列の最初の要素に自動的にリセットされます。これは、事前にreset()を呼び出す必要がないことを意味します。 foreach ループ
foreach は内部配列ポインターに依存しているため、ループ内で変更すると予期しない動作が発生する可能性があります。
ループ内で配列要素を直接変更できるようにするには、$value の前に & を付けます。その場合、値は参照によって割り当てられます。
<?php <br>
$arr = 配列(1, 2, 3, 4);<br>
foreach ($arr として &$value) {<br>
$value = $value * 2;<br>
}<br>
// $arr は array(2, 4, 6, 8) になりました<br>
unset($value); // 最後の要素で参照を中断します<br>
?>
$value の参照は、反復された配列が参照できる場合 (つまり、変数である場合) にのみ可能です。次のコードは機能しません:
<?php <br>
foreach (array(1, 2, 3, 4) as &$value) {<br>
$value = $value * 2;<br>
}<br>
?>
警告
$value と最後の配列要素の参照は、foreach ループ後も残ります。 unset()で破棄することをお勧めします
注:
foreach は、「@」を使用してエラー メッセージを抑制する機能をサポートしていません。
次のものが機能的に同一であることに気づいたかもしれません:
<?php <br>
$arr = array("1", "2", "3");<br>
リセット($arr);<br>
while (list(, $value) = each($arr)) {<br>
echo "値: $value<br>n";<br>
}<br>
<br>
foreach ($arr を $value として) {<br>
echo "値: $value<br>n";<br>
}<br>
?>
以下も機能的には同一です:
<?php <br>
$arr = array("1", "2", "3");<br>
リセット($arr);<br>
while (list($key, $value) = each($arr)) {<br>
echo "キー: $key; 値: $value<br>n";<br>
}<br>
<br>
foreach ($arr as $key => $value) {<br>
echo "キー: $key; 値: $value<br>n";<br>
}<br>
?>
使用法を示すその他の例:
<?php <br>
/* foreach 例 1: 値のみ */<br>
<br>
$a = 配列(1, 2, 3, 17);<br>
<br>
foreach ($a として $v) {<br>
echo "$a の現在の値: $v.n";<br>
}<br>
<br>
/* foreach 例 2: 値 (説明のために手動アクセス表記を印刷) */<br>
<br>
$a = 配列(1, 2, 3, 17);<br>
<br>
$i = 0; /* 説明のみを目的としています */<br>
<br>
foreach ($a として $v) {<br>
echo "$a[$i] => $v.n";<br>
$i++;<br>
}<br>
<br>
/* foreach 例 3: キーと値 */<br>
<br>
$a = 配列(<br>
"1" => 1,<br>
「2」 => 2、<br>
「3」 => 3、<br>
「セブンティーン」=> 17<br>
);<br>
<br>
foreach ($a as $k => $v) {<br>
echo "$a[$k] => $v.n";<br>
}<br>
<br>
/* foreach 例 4: 多次元配列 */<br>
$a = 配列();<br>
$a[0][0] = "a";<br>
$a[0][1] = "b";<br>
$a[1][0] = "y";<br>
$a[1][1] = "z";<br>
<br>
foreach ($a として $v1) {<br>
foreach ($v1 を $v2 として) {<br>
エコー "$v2n";<br>
}<br>
}<br>
<br>
/* foreach 例 5: 動的配列 */<br>
<br>
foreach (array(1, 2, 3, 4, 5) as $v) {<br>
エコー "$vn";<br>
}<br>
?>
(PHP 5 >= 5.5.0)
PHP 5.5 では、 list() を次のように指定することで、配列の配列を反復処理し、ネストされた配列をループ変数に展開する機能が追加されました。 値。
例:
<?php <br>
$array = [<br>
[1、2]、<br>
[3、4]、<br>
];<br>
<br>
foreach ($array as list($a, $b)) {<br>
// $a にはネストされた配列の最初の要素が含まれます<br>
// $b には 2 番目の要素が含まれます。<br>
echo "A: $a; B: $bn";<br>
}<br>
?>
上記の例は次のように出力します:
リーリーlist() に指定できる要素の数は、 ネストされた配列内に存在する場合、残りの配列値は無視されます:
<?php <br>
$array = [<br>
[1, 2],<br>
[3, 4],<br>
];<br>
<br>
foreach ($array as list($a)) {<br>
// Note that there is no $b here.<br>
echo "$a\n";<br>
}<br>
?>
The above example will output:
1 3
A notice will be generated if there aren't enough array elements to fill the list():
<?php <br>
$array = [<br>
[1, 2],<br>
[3, 4],<br>
];<br>
<br>
foreach ($array as list($a, $b, $c)) {<br>
echo "A: $a; B: $b; C: $c\n";<br>
}<br>
?>
The above example will output:
Notice: Undefined offset: 2 in example.php on line 7 A: 1; B: 2; C: Notice: Undefined offset: 2 in example.php on line 7 A: 3; B: 4; C: