我有一个数组,我想使用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
}有人能帮上忙吗?
发布于 2010-04-21 01:36:31
在大多数情况下,在SQL查询的末尾添加ORDER BY updated会更容易,但是,如果您的数据来自多个源,并且您需要在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'])
发布于 2013-11-20 19:49:43
按指定的mysql日期时间字段和顺序对记录数组/assoc_ array进行排序:
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));发布于 2010-04-21 01:46:15
如果你真的需要使用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");
?>https://stackoverflow.com/questions/2677281
复制相似问题