laravel 按日期对数组进行排序
Posted
技术标签:
【中文标题】laravel 按日期对数组进行排序【英文标题】:laravel sort an array by date 【发布时间】:2016-09-30 18:25:38 【问题描述】:你好朋友,我有一个如下所示的数组:
array:3 [▼
0 => array:6 [▼
"date" => "2016-05-31 15:08:33"
0 => "31 May 16"
1 => "aze"
2 => "2"
3 => "hi"
4 => "487841464704194.jpg"
]
1 => array:6 [▼
"date" => "2016-05-31 15:26:09"
0 => "31 May 16"
1 => "aze"
2 => "2"
3 => "hey"
4 => "487841464704194.jpg"
]
2 => array:6 [▼
"date" => "2016-06-01 11:33:06"
0 => "01 Jun 16"
1 => "aze"
2 => "2"
3 => "Dm me please"
4 => "487841464704194.jpg"
]
]
我的目标是按date
对其进行排序。所以从新到旧。
如果尝试这样做:
$comarrSorted = $comarr->sortByDesc('date');
dd($comarrSorted);
但是我得到了这个讨厌的错误:
Call to a member function sortByDesc() on array
谁能帮帮我?我猜这个错误是因为它是一个收集功能引起的?难道不能用这个函数对我的数组进行排序吗?
提前非常感谢!
【问题讨论】:
使用usort函数 参考:***.com/questions/2699086/… 【参考方案1】:您可以将usort()
与自定义comarison 函数一起使用。
function sortByDate($arr1, $arr2)
$tmp1 = strtotime($arr1['date']);
$tmp2 = strtotime($arr2['date']);
return $tmp1 - $tmp2;
usort($array, 'date');
【讨论】:
但我只有 1 个数组,我需要 $arr1 和 $arr2 做什么? 我添加了新答案。【参考方案2】:你必须创建自己的函数
array_sort_by_column($array, 'date');
function array_sort_by_column(&$array, $column, $direction = SORT_ASC)
$reference_array = array();
foreach($array as $key => $row)
$reference_array[$key] = $row[$column];
array_multisort($reference_array, $direction, $array);
【讨论】:
一定有更简单的方法可以用 Laravel 做到这一点,还是我弄错了? 这是更简单的方法,我认为,laravel 不提供任何与数组相关的功能。如果您有更好的答案,请告诉我。 ***.com/a/52368760/10888237 下面这个答案是更好的解决方案。【参考方案3】:您可以转换为collection
,调用sortBy()
,然后再转换回array
,这一切都在一条线上。
$sortedArr = collect($array)->sortBy('date')->all();
【讨论】:
这会返回一个集合,为了将它转换回一个数组,我们可以使用values()
函数。 $sortedArr = collect($array)->sortBy('date')->values();
【参考方案4】:
您可以使用此解决方案获得结果:
collect($yourArray)->sortBy('Key')->values();
【讨论】:
以上是关于laravel 按日期对数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章