如何在Laravel多维集合中删除列?是否有简便单行写法?
从Laravel多维集合中删除指定列的简洁单行写法
嘿,这个需求确实在日常开发里太常见了!你目前用map搭配except的思路完全没问题,不过确实有更简洁的单行写法,不用写箭头函数就能搞定:
场景1:集合元素是Eloquent模型
如果你的多维集合里的每个元素是Eloquent模型(比如从数据库查询出来的集合),可以直接用链式方法调用:
$z = $collection->map->except(['column_to_remove', 'another_column']);
这个写法的原理是:Laravel集合的map方法支持直接传入方法名(这里是except),它会自动把集合里的每个元素作为参数传给这个方法,等价于你原来的map(fn($item) => $item->except(...)),但代码更短更清爽。
场景2:集合元素是普通关联数组
如果你的集合里是普通数组,那可以结合Illuminate\Support\Arr类的except方法来写单行:
use Illuminate\Support\Arr; $z = $collection->map(fn($item) => Arr::except($item, ['column_to_remove', 'another_column']));
虽然还是需要箭头函数,但这已经是数组场景下最简洁的单行写法了,而且Arr::except是Laravel内置的工具方法,处理数组非常顺手。
另外补充一下:如果你想直接修改原集合而不是返回新集合,可以把map换成transform,比如:
$collection->transform->except(['column_to_remove']); // 之后$collection就是处理后的结果,不用再赋值给$z
内容的提问来源于stack exchange,提问作者Dr. Chocolate
相关产品推荐
相关产品推荐

