php - 如何在 PHP 中对日期数组进行排序

标签 php arrays arraylist associative-array sorting

我有一个这种格式的数组:

Array
(
    [0] => Array
        (
            [28th February, 2009] => 'bla'
        )

    [1] => Array
        (
            [19th March, 2009] => 'bla'
        )

    [2] => Array
        (
            [5th April, 2009] => 'bla'
        )

    [3] => Array
        (
            [19th April, 2009] => 'bla'
        )

    [4] => Array
        (
            [2nd May, 2009] => 'bla'
        )

) 

我想按日期的升序(基于月、日和年)对它们进行排序。最好的方法是什么?

最初,电子邮件是以 MySQL 日期格式获取的,所以我可以让数组处于这种状态:

Array
[
    ['2008-02-28']='some text',
    ['2008-03-06']='some text'
]

也许当它采用这种格式时,我可以遍历它们,删除所有 '-'(连字符)标记,以便它们保留为整数,使用 array_sort()< 对它们进行排序 并再次遍历它们以对它们进行排序?如果有另一种方法,我会更喜欢,因为我会为每个用户做 3 次循环。

谢谢。

编辑:我也可以这样做:

$array[$index]=array('human'=>'28 Feb, 2009',
                   'db'=>'20080228',
                   'description'=>'Some text here');

但是使用这个,是否有任何方法可以单独根据 'db' 元素对数组进行排序?

编辑 2:更新初始 var_dump

最佳答案

使用 ISO (yyyy-mm-dd) 格式而不是“english”格式,然后只需使用 ksort函数以正确的顺序排列它们。

不需要删除连字符,ksort 会对字符串键进行字母数字比较,yyyy-mm-dd 格式和词法一样完美顺序与实际日期顺序一致。

编辑 我看到您现在已经更正了您的问题,表明您实际上有一个数组数组,并且排序键位于子数组中。在这种情况下,您应该按照其他地方的建议使用 uksort,但我建议您根据 DB 格式化日期进行自己的编辑和排序,而不是通过解析人类​​可读的格式:

function cmp($a, $b)
{
    global $array;
    return strcmp($array[$a]['db'], $array[$b]['db']);
}

uksort($array, 'cmp');

关于php - 如何在 PHP 中对日期数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/597863/

相关文章:

php - 将 MYSQL 命令行查询转换为内联 php 查询

java - 如何在特定字符之前分割字符串(以便分隔符位于结果的第二部分)

JavaScript 数组验证并查找最后一项

Java:可调整大小的数组列表不会保持平行

java - 泛型 <? super A> 不允许将 A 的父类(super class)型添加到列表中

php - Laravel 完全加入 groupby 并计数

php - MySQL SUM() 给出的总数不正确

javascript - 在jquery php中解析json数组

PHP if语句错误

java - 如何随机化输出