ホームページ  >  記事  >  バックエンド開発  >  $key => $value としての PHP foreach の 2 つの使用法

$key => $value としての PHP foreach の 2 つの使用法

不言
不言オリジナル
2018-04-17 16:16:509642ブラウズ

この記事では、$key => $value として PHP の foreach の 2 つの使用法を紹介します。これは、必要な友達に参照してもらえるように共有します。 1. foreach 構文の紹介。

PHP 4 以降には、配列を走査するための便利な方法である foreach 構造が含まれています。 foreach は配列でのみ使用でき、他のデータ型または初期化されていない変数で使用しようとするとエラーが発生します。構文は 2 つあり、2 番目の構文は最初の構文を拡張したものです。

foreach(array_expression as $value) statement
foreach(array_expression as $key => $value) statement
最初の形式は、指定された array_expression 配列を反復処理します。ループを通過するたびに、現在のセルの値が $value に割り当てられ、配列内のポインターが 1 ステップ前に移動します (そのため、次のループで次のセルが取得されます)。

2 番目の形式は同じことを行います
が、現在のセルの値に加えて、各ループでキー値も変数 $key

に割り当てられる点が異なります。以下のコードを見てください:

$arr = array("1"=>"111","2"=>"222","3"=>"333");
foreach($arr as $key=>$value)
{
echo $key."=>".$value."\n";
}
结果如下:
1=>111
2=>222
3=>333

ここでのキー値は配列の添字として理解できます。配列要素 a[2] の添字は 2 です。

foreach の実行が開始されると、配列内のポインターが自動的にポイントされます。最初のユニットへ。これは、foreach ループの前にreset()を呼び出す必要がないことを意味します。 while ループにはリセットが必要です。以下の 2 つのコードはまったく同じように機能します。

1. while ループを使用します

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

2. foreach を使用します

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

また、foreach は配列自体ではなく、指定された配列のコピーを操作することに注意してください。したがって、 each() を構築しても、元の配列ポインタは変更されず、配列単位の値は影響を受けません。

foreach は、「@」を使用してエラー メッセージを抑制する機能をサポートしていません。

2. PHP foreach の概要

1. foreach での参照の使用。 通常、foreach($arr as $value)の$arrと$valueはコピーであり、外部要因の影響を受けません、つまり

$arr = array(0,1,2,3,4,5);
foreach($arr as $value){
$arr = array();
echo $value;
}
结果是:12345

しかし、$arrが参照である場合、状況は異なります。問題を説明すると

$arr = array(0,1,2,3,4,5);
$arr = &$arr;
foreach($arr as $value){
$arr = array();
echo $value;
}
结果是: 0

これは、ループで使用される $arr が、コピーを作成するのではなく、元のデータを直接ポイントしているためです。

$value が参照であり、$arr が参照ではない場合、結果は同じです。 同様に、$value はコピーではなく元のデータを指します

$arr = array(0,1,2,3,4,5);
foreach($arr as &$value){
$arr = array();
echo $value;
}
结果是: 0

別の特殊な状況、つまり $arr がグローバルとして定義されている 変数の場合、$arr も参照になります

global $arr;
$arr = array(0,1,2,3,4,5);
foreach($arr as $value){
$arr = array();
echo $value;
}
结果是: 0

2. 配列を 2 回ループする場合、このように記述してはなりません

foreach($arr as &$value){}
foreach($arr as $value){}

これにより、2 回目のループの結果が正しくなくなります(おそらく PHP のバグです)。代わりに以下を使用できます:

//solution 1
foreach($arr as &$value){}
unset($value);
foreach($arr as $value){}
//solution 2
foreach($arr as &$value){}
foreach($arr as &$value){}
//solution 3
foreach($arr as &$value){}
$arr2 = $arr;
foreach($arr2 as $value){}

関連する推奨事項:

PHP での foreach の使用法と例の詳細な説明

以上が$key => $value としての PHP foreach の 2 つの使用法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。