​​"111","2"=>"222","3"=>"333"); foreach($arr as $key=>$value)"/> ​​"111","2"=>"222","3"=>"333"); foreach($arr as $key=>$value)">

ホームページ  >  記事  >  バックエンド開発  >  PHP での foreach 参照から生じる問題の分析

PHP での foreach 参照から生じる問題の分析

伊谢尔伦
伊谢尔伦オリジナル
2017-06-23 15:12:281096ブラウズ

1、foreachは、arrayに対するphpのloop出力です。

例:

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

結果は次のとおりです:

1=>111
2=>222
3=>333

2、わずかに変更:

foreach($arr as $key=>$value)
{
//echo $key."=>".$value."\n";
$key = &$arr[$key];
}
print_r($arr);

結果は次のとおりです:

Array
(
    [1] => 2
    [2] => 3
    [3] => 333
)

コードの説明:

元の配列が変更されていることがわかりました。なぜですか?勉強しましょう。

コードの重要な部分は次のとおりです: $key = &$arr[$key];

$key は $arr[$key] の 参照、つまり $key が変更されると、$arr[ $key] も対応する値に変更されます。

まず第一に、配列の値をそれぞれ $key と $value に割り当てる foreach の原理を理解する必要があります。

つまり、$key と $value も通常の変数です。

次の分析では、最初のループで $key = &$arr[$key]; は &$arr[1] が変数 $key を指していることを意味します。

foreach ループが 2 回目のパスに到達すると、まず、$key に値 2 が割り当てられます。このとき、もう一度注意してください、$key = &$arr[$key];

結果は次のようになります: $arr[ 1] に値が割り当てられます。これがこの時点での新しい $key であり、2 です。

2 番目のループの後、元の配列は次のようになります:

Array
(
    [1] => 2
    [2] => 222
    [3] => 333
)

同様に、3 番目のループの後、それは次のようになります:

Array
(
    [1] => 2
    [2] => 3
    [3] => 333
)

ここで、大まかに説明してきました。

3. foreach での割り当てプロセスをより明確に理解するために、次のようにすることができます:

$arr = array("1"=>"111","2"=>"222","3"=>"333");
foreach($arr as $key=>$value)
{
$key  = &$arr[$key];
$key = "hello";
unset($key);
print_r($arr);
}

結果は次のようになります:

Array
(
    [1] => hello
    [2] => 222
    [3] => 333
)
Array
(
    [1] => hello
    [2] => hello
    [3] => 333
)
Array
(
    [1] => hello
    [2] => hello
    [3] => hello
)

コードの説明:

$key の値を "hello" に直接割り当てます。 " 各ループに影響を与えないようにするには、$key 変数を解放します。

これにより、より明確になるはずです。

以上がPHP での foreach 参照から生じる問題の分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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