【问题标题】:Sorting array based on date/time根据日期/时间对数组进行排序
【发布时间】:2015-09-07 02:12:14
【问题描述】:

我正在尝试根据日期/时间对多维数组进行排序,但是当我执行 print_r 时它似乎无法正常工作。我最好的猜测是,我提供给 strtotime() 的时间格式不正确,但是日期和时间格式都列出了,但在 php 手册中是分开的,没有抛出错误。

我使用的格式在代码中不清楚,所以这里是:yyyy-mm-dd hhmm(24h,没有冒号 GMT)

代码如下:

function dateSort($a, $b){
    $d1 = strtotime($a['date'].' '.$a['startTime']);
    $d2 = strtotime($b['date'].' '.$a['startTime']);
    return $d1 - $d2;
}    
usort($events, 'dateSort');
print_r($events);

【问题讨论】:

  • 在执行return 之前检查$d1$d2 的值,看看它们是否符合您的预期。也许可以为数组项提供一些示例值,以便我们产生问题。

标签: php arrays sorting datetime


【解决方案1】:

IVAO。 你在 sn-p 的第三行有错字。第二行指的是$a,但在第三行你将$b$a 混合在一起:)。

另外,我认为,您根本不需要使用 strtotime。查看sn-p:

<?php

function dateSort($a, $b)
{
    $d1 = floatval(str_replace('-', '', $a['date']) . " $a[startTime]");
    $d2 = floatval(str_replace('-', '', $b['date']) . " $b[startTime]");
    return $d1 - $d2;
}

$events = [
    ['date' => '2015-05-01', 'startTime' => '2300', 'value' => 'Event 1'],
    ['date' => '2012-05-01', 'startTime' => '1430', 'value' => 'Event 2'],
    ['date' => '2011-09-17', 'startTime' => '1021', 'value' => 'Event 3'],
    ['date' => '2001-01-22', 'startTime' => '0959', 'value' => 'Event 4'],
    ['date' => '1999-02-05', 'startTime' => '1740', 'value' => 'Event 5'],
];

usort($events, 'dateSort');
echo '<pre>' . print_r($events, 1) . '</pre>';

And click to codepad.

【讨论】:

    【解决方案2】:

    从 PHP 手册中,你可以尝试更新你的 dateSort() 函数

    function dateSort($a, $b){
        $d1 = strtotime($a['date'].' '.$a['startTime']);
        $d2 = strtotime($b['date'].' '.$a['startTime']);
        return ($d1 < $d2) ? -1 : 1;
    }    
    

    建议你给我们一些你的输出,更容易从那里得到它。

    【讨论】:

    • 我尝试在上面粘贴您的代码,但它根本不会改变排序顺序。经过进一步调查,我认为这是我的问题所在。排序后的数组可以在这里看到演示:aaron-schpitzer.ca/en/events
    • 时间似乎被完全忽略了,ids在同一日期按顺序排列
    • @IVAOCA-WM 更新了代码。原始代码来自 PHP 手册,我建议您自己更新代码...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-24
    • 2020-05-29
    • 2020-03-20
    • 1970-01-01
    相关资源
    最近更新 更多