laravel - 按 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 无效
解决方案
$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
中该行的参数。
推荐阅读
- c# - 我得到除 1 以外的任何数字
- java - 简单直观的理解Java程序执行
- css - 更改整个表格的字体大小
- django - 如果在您的购物车中,则从首页隐藏物品
- algorithm - 递归过滤和映射属性列表
- amazon-web-services - 给定特定查询字符串参数值,如何在 Api Gateway 级别重定向?
- javascript - 如何评估雪花存储过程中的语句
- python - Flask-SocketIO 在 Werkzeug 下运行 如何让服务器在 eventlet 上运行?
- python - 使用 networkx 绘制图形时,如何在边缘使用颜色?
- javascript - amcharts第3版如何绘制两个值的变化值