PHP按包含日期的元素对多维数组进行排序

PHP按包含日期的元素对多维数组进行排序

我有一个数组,如:

Array([0] => Array
    (
        [id] => 2
        [type] => comment        [text] => hey        [datetime] => 2010-05-15 11:29:45
    )[1] => Array
    (
        [id] => 3
        [type] => status        [text] => oi        [datetime] => 2010-05-26 15:59:53
    )[2] => Array
    (
        [id] => 4
        [type] => status        [text] => yeww        [datetime] => 2010-05-26 16:04:24
    ))

有人能建议一种基于datetime元素排序/排序的方法吗?


芜湖不芜
浏览 851回答 3
3回答

慕姐4208626

使用usort()以及自定义比较功能:function date_compare($a, $b){     $t1 = strtotime($a['datetime']);     $t2 = strtotime($b['datetime']);     return $t1 - $t2;}    usort($array, 'date_compare');编辑:您的数据组织在数组中。为了更好地区分这些记录,让我们调用内部数组(数据)记录,以便您的数据实际上是一个记录数组。usort将其中两个记录传递给定的比较函数。date_compare()一次。date_compare然后提取"datetime"字段中的每个记录作为UNIX时间戳(整数),并返回差异,这样结果将是0如果两个日期相等,则为正数,如果第一个日期($a)为较大值或负值,如果第二个参数($b)更大。usort()使用此信息对数组进行排序。

梦里花落0921

在php 7中,您可以使用宇宙飞船操作员:usort($array,&nbsp;function($a,&nbsp;$b)&nbsp;{ &nbsp;&nbsp;return&nbsp;new&nbsp;DateTime($a['datetime'])&nbsp;<=>&nbsp;new&nbsp;DateTime($b['datetime']);});

波斯汪

这应该管用。我通过strtotime将日期转换为Unix Time。&nbsp;&nbsp;foreach&nbsp;($originalArray&nbsp;as&nbsp;$key&nbsp;=>&nbsp;$part)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$sort[$key]&nbsp;=&nbsp;strtotime($part['datetime']); &nbsp;&nbsp;} &nbsp;&nbsp;array_multisort($sort,&nbsp;SORT_DESC,&nbsp;$originalArray);一个线性版本将使用多个数组方法:array_multisort(array_map('strtotime',array_column($originalArray,'datetime')), &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SORT_DESC,&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$originalArray);
打开App,查看更多内容
随时随地看视频慕课网APP