如何更新 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您将获得有关参考变量的更多信息。