2017-04-14 37 views
3

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

@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" 
     ], 
], 
+0

[PHP按照含有日期的元素对多维数组进行排序]可能的重复(http://stackoverflow.com/questions/2910611/php-sort-a-multidimensional-array-by-element-containing-date) – mickmackusa

+0

你如果您在发布问题前未搜索现有答案,则将其作为资源贬值。看看有多少答案对你有帮助:http://stackoverflow.com/search?q=how+to+sort+multidimensional+array+by+date – mickmackusa

+0

downvoted因为没有显示任何努力的研究和自我解决 – mickmackusa

回答

1

您应该能够使用Laravel的集合,使这个很容易。在呼叫config()中调用collect(),然后使用集合上的sortBy()方法按“日期”键的strtotime()值排序记录。如果您想以其他方式排序,请使用sortByDesc()方法。

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

Documentation here

+0

谢谢,我知道有这样做的laravel方式,我只是找不到任何文件,没有指向我香草的PHP – Aaron

0

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

如果您只是要复制粘贴手动代码,请将链接留作评论。否则,请编辑你的答案以适应这个确切的问题。这是一个多维数组。 – mickmackusa

+0

您是否尝试在手机上编辑代码? –

+0

此代码不能提供预期的结果。发布前您没有测试过。如果您要提供答案,请完成这项工作。否则,删除你的答案,继续前进。 – mickmackusa