我一直在通過值傳遞給函數時正在修改數組。按值排列的PHP數組參數,通過引用循環訪問數組項時得到修改
我檢查了代碼,並在函數內部數組循環獲取引用的元素。
我很驚訝地看到循環後數組項被標記爲引用。我不知道這是什麼意思,但必須是我的問題的根源。
讓我舉個例子來看看這一點。
<?php
error_reporting(E_ALL);
ini_set('display_errors' , 1);
$a = array(array(0));
echo '--1--';var_dump($a);
dummy($a);
echo '--4--';var_dump($a);
function dummy($arg) {
foreach($arg as &$item) {
$item[0] = 3;
}
dummy2($arg);
echo '--3--';var_dump($arg);
}
function dummy2($arg) {
foreach($arg as &$item) {
$item[1]=9;
}
echo '--2--';var_dump($arg);
}
?>
這段代碼我希望,在3點,$ ARG將只有一個元素之後,但它有兩個,所以它已被dummy2功能修改。
輸出如下:
--1--array(1) { [0]=> array(1) { [0]=> int(0) } }
--2--array(1) { [0]=> &array(2) { [0]=> int(3) [1]=> int(9) } }
--3--array(1) { [0]=> &array(2) { [0]=> int(3) [1]=> int(9) } }
--4--array(1) { [0]=> array(1) { [0]=> int(0) } }
爲什麼陣列標記爲&陣列通過引用繞環後? 這怎麼能避免?