使用foreach循环更改数组的值而不进行修改

问题描述 投票:2回答:3

我有一个示例代码。真奇怪!即使没有在已定义的数组中进行任何更改,但仍然更改了我定义的数组的值。

$myarr = array(1, 2, 3, 4);
foreach ($myarr as &$myvalue) {
    $myvalue = $myvalue * 2;
}
print_r($myarr); // Output - Array ( [0] => 2 [1] => 4 [2] => 6 [3] => 8 )

你能解释一下,怎么样?

php arrays reference
3个回答
2
投票

您确实更改了原始数组,因为您在数组循环中使用&

这个信号为references作为@axiac评论。

为了避免对原始数组进行更改,请使用以下for循环:

foreach ($myarr as $myvalue)

0
投票

你正在传递myarr的地址,其中myvalue使用相同的myarr地址,为什么它会改变

用这个

  $myarr = array(1, 2, 3, 4);
    foreach ($myarr as $myvalue) {
        $myvalue = $myvalue * 2;
    }
    print_r($myarr);

0
投票

你在$ myvalue之前没有“&”尝试过吗?

请在这里阅读PHP: What does a & in front of a variable name mean?

© www.soinside.com 2019 - 2024. All rights reserved.