回覆列表
  • 1 # 匠工加工

    修改了一下,感覺這樣你應該能理解的了了。

    感覺你在一個誤區裡面。。

    第一次帶&的foreach並沒有改變陣列的內容。。而是最後一次迴圈$value引用了陣列的最後一個項

    (可以測試一下,在第一次迴圈結束後unset($value),第二次迴圈的結果就不會有變化),

    在你第二個foreach也是使用的$value變數,這才造成了怪異的問題(可以換個變數,比如$val,輸出的陣列就不會有變化)。

    第二個foreach是賦值給$value,但是這時的$value是引用的陣列的最後一個值,所以,第一次迴圈把one賦值給了最後一個值,第二次把two賦值給最後一個,第三次也就是最後一個已經在第二次迴圈被賦值為two,所以仍然是two。

  • 2 # 小白兔修車

    HP中的&傳值引用的問題,在foreach迴圈的結果能幫解釋下輸出的結果原理是什麼?

    程式碼如下:

    $arr = array("one","two","three");

    foreach ($arr as &$value){ echo "Value:".$value."

    "; }

    foreach ($arr as $value){ echo "Value:".$value."

    "; }

    ?>

    輸出結果:

    Value:one

    Value:two

    Value:three

    Value:one

    Value:two

    Value:two

    第一次帶&的foreach並沒有改變陣列的內容。。

    而是最後一次迴圈$value引用了陣列的最後一個項 (可以測試一下,在第一次迴圈結束後unset($value),第二次迴圈的結果就不會有變化),

    在你第二個foreach也是使用的$value變數,這才造成了怪異的問題(可以換個變數,比如$val,輸出的陣列就不會有變化)。

    第二個foreach是賦值給$value,但是這時的$value是引用的陣列的最後一個值,

    所以

    第一次迴圈把one賦值給了最後一個值,

    第二次把two賦值給最後一個,

    第三次也就是最後一個已經在第二次迴圈被賦值為two,所以仍然是two。

  • 3 # 變餅檔

    第一次帶&的foreach並沒有改變陣列的內容。。

    而是最後一次迴圈$value引用了陣列的最後一個項 (可以測試一下,在第一次迴圈結束後unset($value),第二次迴圈的結果就不會有變化),

    在你第二個foreach也是使用的$value變數,這才造成了怪異的問題(可以換個變數,比如$val,輸出的陣列就不會有變化)。

    第二個foreach是賦值給$value,但是這時的$value是引用的陣列的最後一個值,

    所以

    第一次迴圈把one賦值給了最後一個值,

    第二次把two賦值給最後一個,

    第三次也就是最後一個已經在第二次迴圈被賦值為two,所以仍然是two。

  • 中秋節和大豐收的關聯?
  • 如何看待當代畫家羅中立於1980年創作完成的大幅畫布油畫作品《父親》?