2016-11-16 75 views
0

我有一個數組稱爲$my_array。 我創建$ my_array這樣的:試圖將財產分配給數組

$my_array = []; 
$my_array[0] = []; 
$my_array[1] = []; 
$my_array[2] = []; 
$my_array[3] = []; 

$my_array每個元素是一個數組:

foreach ($my_array as $array){ 
    print(gettype($array)); 
    print(" /// "); 
} 

輸出:array /// array /// array /// array ///

foreach ($my_array as $array){ 


    $array['link_root'] = "a string"; 

    print($array['link_root']); 
    print("  /////  "); 
} 

輸出是:a string ///// a string ///// a string ///// a string /////

,然後當我嘗試:

print($my_array[0]['link_root']) 

我得到:PHP error: Undefined index: link_root

如何反覆設定值數組的鍵/屬性和這是爲什麼不工作?

+2

嘗試'的print_r()'或'的var_dump()'首先看到什麼在陣列'$ my_array' ..其次,您在循環時嘗試寫入的數組是一個副本。 – Xorifelse

回答

3

foreach默認情況下,控制結構不通過reference

如果你希望能夠在內部修改數組,你需要使用&,表示你希望它像這麼引用傳遞:

foreach ($myArray as &$array) { 
    $array['link_root'] = "a string"; 
} 

print($myArray[0]['link_root']); 

的差別是細微的。另一種方式來做到這一點是通過索引和直接引用它像:

foreach ($myArray as $index => $array) { 
    $myArray[$index]['link_root'] = "a string"; 
} 

print($myArray[0]['link_root']); 

參考:http://php.net/manual/en/control-structures.foreach.php

+0

啊我明白了。謝謝 – user3494047

+0

我相信那裏有一些使用refference方法的暗示,我不記得他們在哪裏。 – Xorifelse

+1

@Xorifelse可能是關於在循環後取消設置變量,以避免稍後重新使用循環變量時偶然修改主數組。 – jeroen