【问题标题】:sorting a config variable based on date in laravel根据 laravel 中的日期对配置变量进行排序
【发布时间】:2017-09-11 06:01:22
【问题描述】:

我有一个使用 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 laravel sorting multidimensional-array laravel-blade


【解决方案1】:

您应该能够使用 Laravel 的集合来简化此操作。将对config() 的调用包装在对collect() 的调用中,然后对集合使用sortBy() 方法,按“日期”键的strtotime() 值对记录进行排序。如果您想以其他方式排序,请使用sortByDesc() 方法。

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

Documentation here.

【讨论】:

  • 谢谢,我知道有一种 laravel 方法可以做到这一点,我只是找不到任何没有指向 vanilla php 的文档
【解决方案2】:

您可以使用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");

【讨论】:

  • 如果您只是要复制粘贴手动代码,只需留下一个链接作为评论。否则,请编辑您的答案以适合这个确切的问题。这是一个多维数组。
  • 此代码未提供预期结果。您在发布之前没有进行测试。如果您要提供答案,请做这项工作。否则,请删除您的答案并继续。
  • @mickmackusa 这是您经过测试且完全运行的脚本!
  • 干得好,下次做正确的事,不要被告知。
  • @Aaron 这个代码似乎是正确的答案(可能是无与伦比的)。如果您对此感到满意,请勾选绿色勾号,以便您的问题被视为已解决。
猜你喜欢
  • 1970-01-01
  • 2017-05-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多