我声明了一个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。
答案 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.
}