猿问

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

我有一个结果集,


{"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} ........]}



GCT1015
浏览 237回答 3
3回答

慕雪6442864

更新为了使用 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"];}基本上,您需要将月份转换为数值。然后在此基础上进行排序。

拉丁的传说

如果是集合,为什么不使用sortBy集合方法。例子$sorted = $collection->sortBy('month');我不认为它会在一个月内工作,但在这种情况下,您可以使用map或each方法遍历集合并另存为另一个集合或数组。

慕无忌1623718

在答案的帮助下,我得到了一个最佳解决方案,$sort_collect = $result->sortBy(function ($item, $i) {     return ( Carbon::parse($item->monthname)->format("m") );});return $sort_collect;返回所需的订单
随时随地看视频慕课网APP
我要回答