【问题标题】:Sort array from days Laravel 5.8从 Laravel 5.8 开始排序数组
【发布时间】:2026-01-12 07:40:01
【问题描述】:

我想根据日期名称顺序对数组进行排序。这是我的数组来自查询结果。

        $data = DB::table('jobs')
                ->select('day', DB::raw('count(*) as count'))
                ->groupBy('day')
                ->get()->toArray();

输出是:

我发送这些数据以使用 chart.js 绘制条形图,所以我想从星期一到星期五对这个数组进行排序。 我是 laravel 的新手。请帮我解决这个问题。提前谢谢你。

【问题讨论】:

  • 请将您的代码作为文本而不是图像包含在其中

标签: php html laravel laravel-5 laravel-5.8


【解决方案1】:

你可以试试这个:

$outputArray  = array[$data[1],$data[3],...];

【讨论】:

  • 如果结果不是所有天(即如果表行中没有某天),则此操作失败。
  • 对于给定数据排序不同的其他情况也失败,此答案仅适用于非常具体的情况
【解决方案2】:

在大多数情况下,您可能想要存储日期数据,而不是带有日期名称的字符串。这样您就可以在日期列上使用order by

在您的情况下,您可以执行以下操作:

$days = array_flip(["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]);

usort($data, function($a, $b) use ($days) {
  return $days[$a->day] <=> $days[$b->day];
});

【讨论】:

    【解决方案3】:

    您可以根据碳日常数对它们进行排序。

    Carbon\Carbon::SUNDAY 评估为 0,Carbon\Carbon::MONDAY 评估为 1,一直到 Carbon\Carbon::SATURDAY 评估为 6。

    要以编程方式获取常量,您可以使用constant($string) 方法。

    $data = DB::table('jobs')
        ->select('day', DB::raw('count(*) as count'))
        ->groupBy('day')
        ->get()
        ->sortBy(function ($job) {
            return constant('\Carbon\Carbon::'.strtoupper($job->day));
        })
        ->values()
        ->toArray();
    

    或使用 php > 7.4

    $data = DB::table('jobs')
        ->select('day', DB::raw('count(*) as count'))
        ->groupBy('day')
        ->get()
        ->sortBy(fn($job) => constant('\Carbon\Carbon::'.strtoupper($job->day)))
        ->values()
        ->toArray();
    

    这应该以周日到周六的顺序返回。 如果您希望他们在周一至周日订购,则需要稍微调整一下。

    代替

    return constant('\Carbon\Carbon::'.strtoupper($job->day))
    
    return (6 + constant('\Carbon\Carbon::'.strtoupper($job->day))) % 7;
    

    【讨论】:

    • 感谢您提供第二种方法。结果很完美,我能够从周一到周日进行排序!