首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP按mysql日期对数组进行排序

问PHP按mysql日期对数组进行排序
EN

Stack Overflow用户
提问于 2010-04-21 01:32:35
回答 3查看 2.3K关注 0票数 2

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

下面是在我的类中名为news的数组示例:

代码语言:javascript
复制
[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字段排序。

我有一些代码我已经开始了,但不确定如何完成它和让它工作。

代码语言:javascript
复制
class ProcessClass {
  // ....
  function sortNews($x)
  {
    usort($this->news, array("ProcessClass", "cmp")); //correct sort type?
  }

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

有人能帮上忙吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-04-21 01:36:31

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

代码语言:javascript
复制
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'])

票数 9
EN

Stack Overflow用户

发布于 2013-11-20 19:49:43

按指定的mysql日期时间字段和顺序对记录数组/assoc_ array进行排序:

代码语言:javascript
复制
    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));
票数 1
EN

Stack Overflow用户

发布于 2010-04-21 01:46:15

如果你真的需要使用PHP排序,你可以使用usort()实现。

代码语言:javascript
复制
<?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");

?>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2677281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档