为什么使用(数组)构建数组导致数组项不被更新?

时间:2018-04-27 23:12:16

标签: php arrays

为什么使用$arr转换(array)会导致数组项不被修改?

$arr = array(1, 2, 3, 4);
foreach ((array)$arr as &$value) {
    $value = $value * 2;
}

$arr现在应该等于[2,4,6,8]但是由于某种原因它仍然等于[1,2,3,4]。

1 个答案:

答案 0 :(得分:2)

您不是在修改原始数组,而是修改当前的循环迭代。如果要修改原始数组,则需要访问键:

foreach ((array) $arr as $k => $v) {
    $arr[$k] = $v * 2;
}

'passing by reference'确认@user2864740以及they已提供的示例,可以更新原始文件。

第三,正如@user2864740在原始评论链中指出的那样,使用(array)似乎会导致它创建一个新数组。

直播示例

Repl