我有一个数组,我想使用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
}
任何人都可以帮忙吗?
答案 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");
?>