PHP 按包含 Y-m-d 的元素对多维数组进行排序 H:i:s date

2022-08-30 06:57:45

我有一个数组,例如:

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
    )

)

任何人都可以建议一种根据日期时间元素进行排序/排序的方法吗?


答案 1

使用 usort() 和自定义比较函数:

function date_compare($a, $b)
{
    $t1 = strtotime($a['datetime']);
    $t2 = strtotime($b['datetime']);
    return $t1 - $t2;
}    
usort($array, 'date_compare');

编辑:您的数据被组织在一个数组数组中。为了更好地区分它们,让我们调用内部数组(数据)记录,以便您的数据实际上是一个记录数组。

usort将一次将其中两条记录传递给给定的比较函数。 然后将每条记录的字段提取为 UNIX 时间戳(整数),并返回差值,因此,如果两个日期都相等,则结果为正数(如果第一个 () 较大)或负值(如果第二个参数 () 较大)。 使用此信息对数组进行排序。date_compare()date_compare"datetime"0$a$busort()


答案 2

这应该有效。我通过strtotime将日期转换为unix时间。

  foreach ($originalArray as $key => $part) {
       $sort[$key] = strtotime($part['datetime']);
  }
  array_multisort($sort, SORT_DESC, $originalArray);

单行版本将使用多种数组方法:

array_multisort(array_map('strtotime',array_column($originalArray,'datetime')),
                SORT_DESC, 
                $originalArray);