Php 按自定义顺序(asc或desc除外)对Laravel集合进行排序
我将此阵列作为Laravel系列:Php 按自定义顺序(asc或desc除外)对Laravel集合进行排序,php,laravel,laravel-5,Php,Laravel,Laravel 5,我将此阵列作为Laravel系列: "data": [ { "id": 863368, "reference": "Ref 1", "status": 1 }, { "id": 863391, "reference": "Ref 2", "status": 2 }, { "id": 863390, "reference": "Ref 3", "status": 2 }, { "id": 8
"data": [
{
"id": 863368,
"reference": "Ref 1",
"status": 1
},
{
"id": 863391,
"reference": "Ref 2",
"status": 2
},
{
"id": 863390,
"reference": "Ref 3",
"status": 2
},
{
"id": 863396,
"reference": "Ref 4",
"status": 3
}
];
我需要按状态排序,而不是按asc或desc排序,但是状态为2的记录应该首先在列表中,然后是状态1,然后是状态3
我想不出如何做到这一点,提前谢谢你。我也遇到过类似的问题
$final = $collection->sortBy(function($item){
return array_search($item->status, ['2', '1', '3']);
});
编号为2的['2','1','3']状态将是第一位,因为他的位置键为0,只需根据需要更改顺序即可
或者您可以创建一个类似['2'=>1,'1'=>2,'3'=>3]的数组
使用类似退货$arry_of_order[$item->status];比每次调用数组搜索更快
另外,如果你能像其他人建议的那样使用DB MySql,你应该坚持使用,$query->orderByRawFIELDstatus,'2','1','3'
对于PostgreSQL外观,Hi也有类似的问题
$final = $collection->sortBy(function($item){
return array_search($item->status, ['2', '1', '3']);
});
编号为2的['2','1','3']状态将是第一位,因为他的位置键为0,只需根据需要更改顺序即可
或者您可以创建一个类似['2'=>1,'1'=>2,'3'=>3]的数组
使用类似退货$arry_of_order[$item->status];比每次调用数组搜索更快
另外,如果你能像其他人建议的那样使用DB MySql,你应该坚持使用,$query->orderByRawFIELDstatus,'2','1','3'
对于PostgreSQL look如果您从MySQL获取数据,您可以通过如下方式更改顺序:
ORDER BY FIELD(status, 2, 1, 3)
如果您是从MySQL获取数据,您可以这样更改顺序:
ORDER BY FIELD(status, 2, 1, 3)
您可以使用orderByRaw获得此信息
也可以使用orderBy
您可以使用orderByRaw获得此信息
也可以使用orderBy
哦,试试看:->orderByRaw'FIELDstatus,2,1,3'的状态只能是1,2或3?或者有3个以上的状态?我想你需要一个高度重复的状态顺序。对吗?22次,1,3Oh,试试:->orderByRaw'FIELDstatus,2,1,3'的状态只能是1,2或3?或者有3个以上的状态?我想你需要一个高度重复的状态顺序。对吗?22次,1,3此溶液适合少量收集。如果一个集合太大,使用MySQL的排序会更好:@mihirbhande问题是关于laravel集合而不是DB,但是从DB排序会更快。我同意,而且你的解决方案是完全正确的,考虑到这个集合可能是通过查询构建的,我觉得值得一提this@MihirBhende非常感谢。我更新了我的答案,所以TS可以考虑到这一点。这个解决方案适合少量收集。如果一个集合太大,使用MySQL的排序会更好:@mihirbhande问题是关于laravel集合而不是DB,但是从DB排序会更快。我同意,而且你的解决方案是完全正确的,考虑到这个集合可能是通过查询构建的,我觉得值得一提this@MihirBhende非常感谢。我更新了我的答案,所以TS可以考虑到这一点。如果我尝试使用此选项,我会收到并出错:lluminate\Database\QueryException:SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;查看与MySQL服务器版本对应的手册,以了解在第1行“asc”附近使用的正确语法SQL:select*from scenarios order by FIELDstatus,2,1,第671行的文件/home/vagrant/code/projectresourceonline/vendor/laravel/framework/src/illighte/Database/Connection.php中有3个asc,如果我尝试使用以下内容,我会收到并出错:lluminate\Database\QueryException:SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;查看与MySQL服务器版本对应的手册,了解第1行“asc”附近使用的正确语法SQL:select*from SCHENATIONS order by FIELDstatus,第671行的文件/home/vagrant/code/projectresourceonline/vendor/laravel/framework/src/light/Database/Connection.php中的2、1、3 asc