如何根据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()
(或类似名称)。在这种方法中,我可能会使用JOIN
或UNION
查询,同时从两个表/行(?)中选择所有信息。在此查询中,按日期排序非常简单,尤其是在 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结果数组进行排序?的主要内容,如果未能解决你的问题,请参考以下文章