在foreach中修改数组并解释原因的问题

时间:2017-09-27 15:44:34

标签: php arrays foreach reference

我总是这样做

e.g。来自我在Laravel的最后一个项目

foreach( $sections as $section )
{
    $section->date = Carbon::parse($section->date)->diffForHumans();
}

它运作良好。从来没有问题,数组被修改为我想要的

但现在我做了这个

$events = $this->events;
        foreach($events as $event)
        {
            $date = new \DateTime($event['date']);
            $event['date'] = (int)$date->format('d');
            echo $event['date'];
            var_dump($event);
        }
        var_dump($events);
        $this->events = $events;

它不能正常工作,循环和外部循环中的不同值。

我看到了什么是坏事,我发现了它是什么,给&或做foreach $ key => $值...

但是没关系。

但事实并非如此。

因为我知道。我记得。我曾多次做过像

这样的事情
foreach($a as $b)
{
    $b = .......
}

它有效。但现在不是。

所以我不明白。但我必须并且想要。

我正在寻找答案,但可以找到它。

为什么有一次它对我有用,而其他时间不起作用,我需要apersand或key =>玩价值?

请理解< 3

为什么有一次它正在工作,而另一个没有。

1 个答案:

答案 0 :(得分:3)

foreach遍历数组的副本,因此除非您创建引用,否则只对该临时副本进行数组元素的修改:< / p>

foreach($a as &$b) {
    $b = 'something';
}

或者按键修改原始数组:

foreach($a as $k => $b) {
    $a[$k] = 'something';
}

对于一个对象数组,该数组是副本,但 copy 中的对象是对原始数组的引用。因此,对副本中对象的修改将反映在原始数组中:

foreach($a as $b) {
    $b->var = 'something';
}