如何根据php中日期列的降序对mysql结果数组进行排序?

Posted

技术标签:

【中文标题】如何根据php中日期列的降序对mysql结果数组进行排序?【英文标题】:How to sort the mysql result array in descending order on the bases of date column in php? 【发布时间】:2017-02-05 22:19:25 【问题描述】:

我不是英语母语,并且是 *** 上的新手,所以如果我做错了事,请纠正我。 我的问题是我从两个不同的mysql数据库名称表中检索数据。

    事件 留言

用于获取数据的代码如下。

$msgres=$ticket->getMessages();
$arr1 = array();
while($msg_row_one = db_fetch_array($msgres))
    $arr1[] = $msg_row_one;

$noteres=$ticket->getNotes();
$arr2 = array();
while ($msg_row_two = db_fetch_array($noteres))
    $arr2[] = $msg_row_two;

在这个过程之后,我正在合并两个数组。

$arr1[]

$arr2[]

像这样。

$merge = array_merge($arr1,$arr2);

然后我得到一个如下的数组。

Array
(
    [0] => Array
        (
            [msg_id] => 7563
            [ticket_id] => 1768
            [messageId] => 
            [msg_type] => R
            [message] => this is a link system . this is a link system .
            [staff_id] => 1
            [staff_name] => System Administrator
            [headers] => 
            [source] => staff
            [ip_address] => 10.12.145.174
            [created] => 2016-09-27 01:49:27
            [attachments] => 0
        )

    [1] => Array
        (
            [msg_id] => 7562
            [ticket_id] => 1768
            [messageId] => 
            [msg_type] => R
            [message] => Last message is this.
            [staff_id] => 1
            [staff_name] => System Administrator
            [headers] => 
            [source] => staff
            [ip_address] => 10.12.145.174
            [created] => 2016-09-26 08:39:46
            [attachments] => 0
        )

    [2] => Array
        (
            [msg_id] => 7561
            [ticket_id] => 1768
            [messageId] => 
            [msg_type] => R
            [message] => Last message is this.
            [staff_id] => 1
            [staff_name] => System Administrator
            [headers] => 
            [source] => staff
            [ip_address] => 10.12.145.174
            [created] => 2016-09-26 08:37:25
            [attachments] => 0
        )

    [3] => Array
        (
            [msg_id] => 7558
            [ticket_id] => 1768
            [messageId] => 
            [msg_type] => R
            [message] => mmmmmmmmmmmmmmmmmmmmmmmmmmm
            [staff_id] => 1
            [staff_name] => System Administrator
            [headers] => 
            [source] => staff
            [ip_address] => 10.12.145.174
            [created] => 2016-09-26 07:47:51
            [attachments] => 0
        )
  )

然后我按以下代码对$merge数组的日期进行降序排序。

$strdate  = array();
$formated = array();
foreach ($merge as $ascdate)
    $strdate[] = strtotime($ascdate['created']);

rsort($strdate);
foreach($strdate as $descdate)
    $formated[] = date('Y-m-d H:i:s',$descdate);

现在我想代表日期按降序对整个 $merge 数组进行排序。意味着最大的日期$merge 数组应该排在最前面。我不知道如何在$merge 数组中应用上述排序日期$formated

【问题讨论】:

你能展示一些你得到的最终数组吗?或者您可以查看这个有用的答案:- ***.com/a/2910637/4248328 试试这个可能对你有帮助***.com/questions/15557373/… 接受您之前问题的答案怎么样? php Sort a multidimensional array by element containing date的可能重复 【参考方案1】:

使用usort 对整个数组进行排序,而不仅仅是提取日期

usort($merge,function ($a,$b) 
      return $a['created'] < $b['created'];
);

【讨论】:

【参考方案2】:

这样做,就是你在合并两个数组后要找的,它使用数组多排序-

function array_orderby()

    $args = func_get_args();
    $data = array_shift($args);
    foreach ($args as $n => $field) 
        if (is_string($field)) 
            $tmp = array();
            foreach ($data as $key => $row)
                $tmp[$key] = $row[$field];
                $args[$n] = $tmp;
            
    
    $args[] = &$data;
    call_user_func_array('array_multisort', $args);
    return array_pop($args);


$arr = array(
        array('msg_id'=>123,'ticket_id'=>'32424','date'=>1233455,'created' => '2016-09-26 07:47:51'),
        array('msg_id'=>143,'ticket_id'=>'sssds','date'=>44724,'created' => '2016-09-27 07:47:51'),
        array('msg_id'=>13,'ticket_id'=>'3xxxx','date'=>434442424,'created' => '2016-10-26 07:47:51'),
        array('msg_id'=>723,'ticket_id'=>'eeeeeee','date'=>9908,'created' => '2016-06-06 17:47:51'),
        array('msg_id'=>793,'ticket_id'=>'fffff','date'=>9908,'created' => '2016-06-06 17:47:56')
    );
echo "Before Sorting";
print_r($arr);
$arr = array_orderby($arr, 'created', SORT_DESC) ;
echo "After sorting";
print_r($arr);

只要运行这个例子,你就会得到你要找的东西

【讨论】:

【参考方案3】:

您可以为此使用多排序 API

参考:示例 #3 对数据库结果进行排序

http://php.net/manual/en/function.array-multisort.php

<?php
$aMultiSort = array();
$aTimeStamp  = array();
foreach ($merge as $key=>$ascdate)
    //create strtotime for numerical sorting
    $ascdate['timestamp'] = strtotime($ascdate['created']);
    $aMultiSort[$key] = $ascdate;
    $aTimeStamp[$key] = $ascdate['timestamp'];


//multi sort with timestamp desc
array_multisort($aTimeStamp, SORT_DESC, $aMultiSort);

【讨论】:

【参考方案4】:

在这种情况下,我可能会创建一个新方法,称为getAllComments()(或类似名称)。在这种方法中,我可能会使用JOINUNION 查询,同时从两个表/行(?)中选择所有信息。在此查询中,按日期排序非常简单,尤其是在 JOIN 查询时。

如果是 UNION 查询,您可以将其包装在外部 SELECT 中,以便对数据进行排序。像这样的:

SELECT * FROM (
    SELECT id, text, date FROM messages
    UNION SELECT id, text, date FROM notes
) ORDER BY date

不需要(相对)昂贵的 PHP 排序,也不需要编写和测试代码所涉及的所有额外工作。毕竟,SQL 引擎是专门为这类操作而设计的。 :)

【讨论】:

以上是关于如何根据php中日期列的降序对mysql结果数组进行排序?的主要内容,如果未能解决你的问题,请参考以下文章

如何按第一位数字的降序对整数数组进行排序? [关闭]

c_cpp 按设置位的降序对数组进行排序

按特定键的降序对字典列表进行排序[重复]

php数组常用函数

PHP 数组排序

就是一个表有2个字段 一个是发布时间 一个是更新时间,如何根据这两个字段来进行降序排序啊