PHP按mysql日期排序数组

时间:2010-04-20 17:32:35

标签: php mysql date arrays sorting

我有一个数组,我想使用MySQL数据库中的日期字段进行排序。

以下是我班级中名为news的数组示例:

[48] => Array
    (
        [id] => 14
        [type] => 3
        [updated] => 2010-04-17 13:54:42
    )

[49] => Array
    (
        [id] => 15
        [type] => 3
        [updated] => 2010-04-17 13:57:21
    )

我想按updated字段排序。

我已经启动了一些代码,但我不确定如何完成它并使其正常工作。

class ProcessClass {
  // ....
  function sortNews($x)
  {
    usort($this->news, array("ProcessClass", "cmp")); //correct sort type?
  }

  function cmp($a, $b)
  {
    //  missing code
  }

任何人都可以帮忙吗?

3 个答案:

答案 0 :(得分:9)

在大多数情况下,将更容易添加ORDER BY updated到SQL查询的末尾,但是如果您的数据来自多个来源而您需要使用PHP,则可以使用usort()基于用户定义的函数对数组进行排序。要使用类函数进行比较,函数必须是静态的。它可以简单地使用函数strcmp()比较数组中的updated值,该函数恰好返回您需要按MySQL格式化日期排序的内容:

class ProcessClass {
  // this must be static
  static function sort_by_updated($a, $b)
  {
    return strcmp($a['updated'], $b['updated']);
  }

  function sortNews()
  {
    usort($this->news, array("ProcessClass", "sort_by_updated")); 
  }

如果您想要反转排序顺序,只需交换比较参数:return strcmp($b['updated'], $a['updated'])

答案 1 :(得分:1)

按指定的mysql datetime字段和顺序对记录数组/ assoc_arrays进行排序:

    function build_sorter($key, $dir='ASC') {
        return function ($a, $b) use ($key, $dir) {
            $t1=strtotime(is_array($a)?$a[$key]:$a->$key);
            $t2=strtotime(is_array($b)?$b[$key]:$b->$key);
            if($t1==$t2) return 0;
            return (str_to_upper($dir)=='ASC'?($t1 < $t2):($t1 > $t2)) ? -1 : 1;
        };
    }


    // $sort - key or property name 
    // $dir - ASC/DESC sort order or empty
    usort($arr, build_sorter($sort, $dir));

答案 2 :(得分:0)

如果您确实需要使用PHP排序,则可以使用usort()实现。

<?php
function mysql_datesort($a, $b)
{
    if ($a == $b) {
        return 0;
    }

    return ($a->date_field < $b->date_field) ? -1 : 1; //custom check here
}

$a = array(); //your PHP array here...

usort($a, "mysql_datesort");

?>