首页 > 解决方案 > 按 id 集排序集合

问题描述

我有一个 id 数组,我想按它们在集合中对给定列进行排序。

例如,

$suppliersOrder = [8,7,5,1,3,4];

$items = Items::get()->sortBy(function($model) use ($suppliersOrder) {
   return array_search($model->supplier_id, $suppliersOrder);
})->values();

这就像订购物品[1,3,4,5,7,8]而不是给定的订单。如果我同样尝试 sortByDesc,[8,7,5,4,3,1]但我无法弄清楚将它们实际排序为给定数组顺序的方法。

然后我的最终目标是跑步$items->groupBy('supplier.name'),这样我就可以得到我想要的订单。


什么 Alexander Villalobos 在评论中建议,我改变了我的代码是这样的:

$items = Items::get()->sortBy(function($model) use ($suppliersOrder) {
   return rsort($model->supplier_id, $suppliersOrder);
});

间接修改重载属性 App\Item::$supplier_id 无效

标签: laravellaravel-5eloquentlaravel-collection

解决方案


$suppliersOrder = [8,7,5,1,3,4];

$items = Items::get()->sortBy(function($row,$key) use ($suppliersOrder) {
   return array_search($row->supplier_id, $suppliersOrder);
});

这应该按照您在 中描述的顺序为您提供排序的项目集合$suppliersOrder。根据Laravel 文档,回调函数的参数包括一个是row集合的参数,另一个是集合key中该行的参数。


推荐阅读