在foreach循环中设置变量并通过引用传递

时间:2017-06-18 01:34:10

标签: php arrays reference pass-by-reference

我最近在玩PHP,想在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" }

有人知道为什么这些片段不相同以及在幕后做了什么?

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

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

首先将$ arr [0]的值赋给$ foo [0]然后取该值并使该值='test'(这不会改变$ arr或$ foo值“无用语句”)

但是这里

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

首先你将$ arr asign到$ foo 然后转到每个语句,获取$ foo的值并修改它 例如:$ foo [0] ='测试',$ foo [1] ='测试'......