根据 laravel 中的日期对配置变量进行排序

sorting a config variable based on date in laravel

我有一个使用 foreach 循环打印出所有对象的配置变量。有没有办法根据日期对打印出来的内容进行排序? 这是我打印对象的代码。我想根据 $press['date']

排序
@foreach (config('constants.pressMetadata') as $press)
    <div>
        <p id="quote">{{ $press['title'] }}</p>
        <div class="more label"><a id="link" href="{{$press['url']}}">-{{$press['company']}}: {{$press['date']}}</a></div>
        <hr>
    </div>
@endforeach

这里是constants.pressMetadata:

'pressMetadata'=>[
      "AARP" => [
          "id" => 1,
          "company" => "AARP",
          "title" => "Updating Your Résumé for the Digital Age",
          "url" => "http://www.aarp.org/work/job-hunting/info-2016/give-resume-a-digital-reboot.html",
          "date" => "Sep 9, 2016"
      ],
      "Business Insider" => [
          "id" => 2,
          "company" => "Business Insider",
          "title" => "8 things you should always include on your résumé",
          "url" => "http://www.businessinsider.com/what-to-always-include-on-your-resume-2016-1",
          "date" => "Jan 28, 2016"
      ],
      "Morning Journal" => [
          "id" => 3,
          "company" => "Morning Journal",
          "title" => "5 things you missed: Google updates search, Jobscan and more",
          "url" => "http://www.morningjournal.com/article/MJ/20140124/NEWS/140129366",
          "date" => "Jan 24, 2014"
      ],
],

可以使用PHP的usort功能。

以下代码摘自 PHP 手册并根据您的需要进行了更改

function cmp($a, $b)
{
    if (strtotime($a['date']) == strtotime($b['date'])) {
        return 0;
    }
    return (strtotime($a['date']) < strtotime($b['date'])) ? -1 : 1;
}

usort(config('constants.pressMetadata'), "cmp");

您应该可以使用 Laravel 的 collection 来简化此操作。将对 config() 的调用包装在对 collect() 的调用中,然后使用 collection 上的 sortBy() 方法按 strtotime() 的值对记录进行排序'date' 键。如果您想以其他方式排序,请使用 sortByDesc() 方法。

@foreach (collect(config('constants.pressMetadata'))->sortBy(function ($press) { return strtotime($press['date']); }) as $press)

Documentation here.