Laravel collect()循环更新元素

时间:2019-03-26 08:43:09

标签: laravel laravel-collection

我声明了一个collect()数据类型的变量。我想遍历它,并更新每一行上的特定列。

示例代码:

    $a = collect([['one' => 1, 'two' => 2], ['one' => 3, 'two' => 4], ['one' => 5, 'two' => 6]]);

    foreach ($a as $b) {
        $b['one'] = 0;
    }

    dd($a);

我不明白,为什么结果是这样:

    Collection {#510 ▼
      #items: array:3 [▼
        0 => array:2 [▼
          "one" => 1
          "two" => 2
        ]
        1 => array:2 [▼
          "one" => 3
          "two" => 4
        ]
        2 => array:2 [▼
          "one" => 5
          "two" => 6
        ]
      ]
    }

我希望每一行的结果是“一个” => 0。

1 个答案:

答案 0 :(得分:1)

您没有修改原始数组,没有地方将修改后的项目存储回数组。为此,最好在集合本身上使用map函数。

$a = collect([['one' => 1, 'two' => 2], ['one' => 3, 'two' => 4], ['one' => 5, 'two' => 6]]);

$a = $a->map(function($item) { 
    $item['one'] = 0; 
    return $item; 
});

每种方式的

foreach ($a as $key => $b) {
   $b['one'] = 0;
   $a[$key] = $b; // override the original item.
}