2016-11-16 98 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