为了账号安全,请及时绑定邮箱和手机立即绑定

php laravel根据月份名称按月份顺序对项目数组进行排序

php laravel根据月份名称按月份顺序对项目数组进行排序

PHP
GCT1015 2022-01-02 16:04:16
我有一个结果集,{"data_points":[{    "monthname": "Apr",    "value": 62},{    "monthname": "Aug",    "value": 1904.53},{    "monthname": "Feb",    "value": 33.33},{    "monthname": "Jan",    "value": 2033.33},{    "monthname": "Jul",    "value": 90.83},{    "monthname": "Dec",    "value": 2030},{    "monthname": "Mar",    "value": 100},{    "monthname": "Sep",    "value": 433.33},{    "monthname": "May",    "value": 5670.93},{    "monthname": "Jun",    "value": 40.4},{    "monthname": "Oct",    "value": 0},{    "monthname": "Nov",    "value": 31}]}我想使用月份顺序按data_points.monthname对项目进行排序,例如{"data_points": [{"monthname":"Jan", "value": 2033.33}, {"monthname": "Feb", "value":33.33} ........]}
查看完整描述

3 回答

?
慕雪6442864

TA贡献1812条经验 获得超5个赞

更新


为了使用 Laravel 提供的方法对集合进行排序,可以使用以下代码


$collection->sort(function ($a, $b) {

            $monthA = date_parse($a['monthname']);

            $monthB = date_parse($b['monthname']);


            return $monthA["month"] - $monthB["month"];

        });

Laravel 文档提到,如果您的排序很复杂,您可以使用回调进行排序


如果您想在 Vanilla PHP 中排序,下面是代码。


$data = '{"data_points": [{ "monthname": "Apr", "value": 62 },{ "monthname": "Aug", "value": 1904.53 },{ "monthname": "Feb", "value": 33.33 },{ "monthname": "Jan", "value": 2033.33 },{ "monthname": "Jul", "value": 90.83 },{ "monthname": "Dec", "value": 2030 },{ "monthname": "Mar", "value": 100 },{ "monthname": "Sep", "value": 433.33 },{ "monthname": "May", "value": 5670.93 },{ "monthname": "Jun", "value": 40.4 },{ "monthname": "Oct", "value": 0 },{ "monthname": "Nov", "value": 31 }]}';

$decoded =  json_decode($data, true);


usort($decoded['data_points'], "compare_months");


$data = json_encode( $decoded );


print_r($data);


function compare_months($a, $b) {

    $monthA = date_parse($a['monthname']);

    $monthB = date_parse($b['monthname']);


    return $monthA["month"] - $monthB["month"];

}

基本上,您需要将月份转换为数值。然后在此基础上进行排序。


查看完整回答
反对 回复 2022-01-02
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

如果是集合,为什么不使用sortBy集合方法。

例子

$sorted = $collection->sortBy('month');

我不认为它会在一个月内工作,但在这种情况下,您可以使用mapeach方法遍历集合并另存为另一个集合或数组。


查看完整回答
反对 回复 2022-01-02
?
慕无忌1623718

TA贡献1744条经验 获得超4个赞

在答案的帮助下,我得到了一个最佳解决方案,


$sort_collect = $result->sortBy(function ($item, $i) { 

    return ( Carbon::parse($item->monthname)->format("m") );

});

return $sort_collect;

返回所需的订单


查看完整回答
反对 回复 2022-01-02
  • 3 回答
  • 0 关注
  • 236 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信