按 id 集合排序集合

Sort Collection By id set

我有一个 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);
});

Indirect modification of overloaded property App\Item::$supplier_id has no effect

$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 docs,回调函数的参数包括一个是集合的 row,另一个是集合中该行的 key