如何使用Laravel Collection转换数组结构并添加指定字段
使用Laravel Collection优雅转换数组结构并添加字段
没问题,用Laravel Collection的map方法完全可以实现这个需求,代码比foreach更简洁优雅,还能利用Collection的链式操作优势!
实现代码
首先我们把原生PHP数组转换成Collection实例,然后通过map遍历每一项,合并字段并添加changeby:
$packers_id = [ [984538,["PartCode"=>"packs701620010","Qty"=>"13","ID"=>"1398163","Date"=>"2020\/08\/08 15:4:6"]], [984538,["PartCode"=>"packs701620020","Qty"=>"1","ID"=>"1398164","Date"=>"2020\/08\/08 15:4:6"]], [984543,["PartCode"=>"packs701620010","Qty"=>"13","ID"=>"1398163","Date"=>"2020\/08\/08 15:4:6"]], [984543,["PartCode"=>"packs701620020","Qty"=>"1","ID"=>"1398164","Date"=>"2020\/08\/08 15:4:6"]] ]; // 转换并添加字段 $transformed = collect($packers_id)->map(function ($item) { return array_merge( ['Arr_ID' => (string)$item[0], 'changeby' => 'me'], $item[1] ); })->toArray(); // 查看结果 dd($transformed);
更简洁的写法(PHP 7.4+)
如果你的项目用的是PHP 7.4及以上版本,还可以用短闭包让代码更紧凑:
$transformed = collect($packers_id)->map(fn($item) => array_merge( ['Arr_ID' => (string)$item[0], 'changeby' => 'me'], $item[1] ))->toArray();
代码解释
collect($packers_id):把原生PHP数组转换成Laravel Collection实例,这样就能调用所有Collection的便捷方法。map():遍历Collection中的每一项,每个$item对应原数组里的子数组(比如[984538, {...}])。array_merge():将Arr_ID、changeby字段和原关联数组合并,得到你需要的结构。toArray():如果需要把Collection转回原生PHP数组,调用这个方法即可;如果后续还要用Collection操作,可以省略这一步。
这样处理后,得到的结果完全符合你想要的数组结构,代码也更简洁易读~
内容的提问来源于stack exchange,提问作者jono
相关产品推荐
相关产品推荐

