2017-06-18 62 views
0

我最近在玩PHP,希望在foreach循环中分配变量并同时通过引用传递值。我有点惊讶,没有奏效。代码:在foreach循环中设置变量并通过引用传递

$arr = array(
    'one' => 'xxxxxxxx', 
    'two' => 'zzzzzzzz' 
); 

foreach ($foo = $arr as &$value) { 
    $value = 'test'; 
} 

var_dump($foo); 

结果:

array(2) { ["one"]=> string(8) "xxxxxxxx" ["two"]=> string(8) "zzzzzzzz" } 

下面的办法显然不工作:

$arr = array(
    'one' => 'xxxxxxxx', 
    'two' => 'zzzzzzzz' 
); 

$foo = $arr; 

foreach ($foo as &$value) { 
    $value = 'test'; 
} 

var_dump($foo); 

结果:

array(2) { ["one"]=> string(4) "test" ["two"]=> &string(4) "test" } 

是否有人知道为什么这些片段是不等价和什么是存在在幕后完成?

+1

[PHP中的数组是通过值还是通过引用传递的?](https://stackoverflow.com/q/2030906/6521116) –

回答

1

$foo = $arr是通过值反转,不参考,你应该使用$foo = &$arr。你可以参考Are arrays in PHP passed by value or by reference?

试试这个,live demo

$arr = array(
    'one' => 'xxxxxxxx', 
    'two' => 'zzzzzzzz' 
); 

foreach ($foo = &$arr as &$value) { 
    $value = 'test'; 
} 

var_dump($foo); 
+0

好吧,但是这样做,我们更改'arr'数组也是;)我不想这样做。通过这种方法,没有必要将变量重新分配给'foo' - 这是没有意义的。 – Ness

+0

如果这样,你的第二个代码片段将会做。 –

0
foreach ($foo = $arr as &$value) { 
    $value = 'test'; 
} 

第一分配的$值ARR [0]至$ foo的[0],然后取该值,使该值= '测试'(这不会改变$ ARR或$ foo的值“没用的声明”)

但这里

$foo = $arr; 
foreach ($foo as &$value) { 
    $value = 'test'; 
} 

首先你ASIGN $ ARR至$ foo的 然后去为每个语句,得到的$ foo的值并修改它 例如:$ foo的[0 ] ='test',$ foo [1] ='t est'...