​​"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:281099瀏覽

1,foreach 是php 對陣列迴圈輸出。

範例:

$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] 也被修改為對應的值。

首先,我們要了解一下,foreach 的原理,它是將數組的值,分別賦值給$key 和$value ;

所以,$key ,$value 也是普通的一個變數

接著分析,第一次迴圈時,$key = &$arr[$key];意思是 &$arr[1] 指向$key 這個變數。

foreach 循環到第二遍的時候,首先,$key 被賦值為2,此時,再關註一下,$key = &$arr[$key];

結果是:$arr[1] 被賦值為此時的新的$key ,也就是2.

第二遍循環結束後,原來的陣列變成:

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

同理,第三次循環結束後,則為:

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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn