如何更新 Laravel 集合中的数组?
How to update an array inside of a Laravel Collection?
我有一个从第 3 方源传递的多维数组,我正在将其转换为 Illuminate Collection 对象并进行分组。
所以它正在像这样重新调整我的数据:
{
#items: array:2 [
"123H0002" => Collection{
#items: array:1 [
0 => array:12 [
"account" => "12345",
"id" => "456",
"name" => "Dave",
...
]
]
}
"456854456456" => Collection{
#items: array:1 [
0 => array:12 [
"account" => "4657456",
"id" => "123",
"name" => "Geoff",
...
]
]
}
]
}
然后我将遍历它以一起处理每组集合。
foreach($data as $items){
$this->process($items)
}
然后在process方法里面,我想往collection里面的array里面添加item,但是好像保存不成功
public function process($data)
{
foreach($data as $item){
$item['status'] = 'NEW';
}
$this->db->insert_batch('imported_data', $data->toArray());
}
现在这里的问题是 $item['status'] 当我在 foreach 循环中调试 $item 数组的内容时,这个变化没有反映在最终的 $data 集合中它转换为数组。
更新集合中的数组我错过了什么?
你无法更新数组,因为它是按值传递的,要修改内容你需要像这样按引用传递:
foreach($data as &$item){
$item['status'] = 'NEW';
}
别忘了取消设置引用:
unset($item);
我认为最好完全避免这个陷阱,只编写必须以正常方式操作原始数组的 foreach 循环:
foreach($data as $index => $entry) {
$data[$index] = ...
}
here您将获得有关参考变量的更多信息。
我有一个从第 3 方源传递的多维数组,我正在将其转换为 Illuminate Collection 对象并进行分组。
所以它正在像这样重新调整我的数据:
{
#items: array:2 [
"123H0002" => Collection{
#items: array:1 [
0 => array:12 [
"account" => "12345",
"id" => "456",
"name" => "Dave",
...
]
]
}
"456854456456" => Collection{
#items: array:1 [
0 => array:12 [
"account" => "4657456",
"id" => "123",
"name" => "Geoff",
...
]
]
}
]
}
然后我将遍历它以一起处理每组集合。
foreach($data as $items){
$this->process($items)
}
然后在process方法里面,我想往collection里面的array里面添加item,但是好像保存不成功
public function process($data)
{
foreach($data as $item){
$item['status'] = 'NEW';
}
$this->db->insert_batch('imported_data', $data->toArray());
}
现在这里的问题是 $item['status'] 当我在 foreach 循环中调试 $item 数组的内容时,这个变化没有反映在最终的 $data 集合中它转换为数组。
更新集合中的数组我错过了什么?
你无法更新数组,因为它是按值传递的,要修改内容你需要像这样按引用传递:
foreach($data as &$item){
$item['status'] = 'NEW';
}
别忘了取消设置引用:
unset($item);
我认为最好完全避免这个陷阱,只编写必须以正常方式操作原始数组的 foreach 循环:
foreach($data as $index => $entry) {
$data[$index] = ...
}
here您将获得有关参考变量的更多信息。