为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
芜湖不芜 2019-07-02 10:36:06
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元素排序/排序的方法吗?
查看完整描述

3 回答

?
慕姐4208626

TA贡献1852条经验 获得超7个赞

使用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()使用此信息对数组进行排序。


查看完整回答
反对 回复 2019-07-02
?
梦里花落0921

TA贡献1772条经验 获得超6个赞

在php 7中,您可以使用宇宙飞船操作员:

usort($array, function($a, $b) {
  return new DateTime($a['datetime']) <=> new DateTime($b['datetime']);});


查看完整回答
反对 回复 2019-07-02
?
波斯汪

TA贡献1811条经验 获得超4个赞

这应该管用。我通过strtotime将日期转换为Unix Time。

  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);


查看完整回答
反对 回复 2019-07-02
  • 3 回答
  • 0 关注
  • 850 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信