按数组值排序多维数组
问题描述:
因此,我正在为正在开发的项目开发一个消息系统,并且希望通过最新消息datetime组织一组对话。按数组值排序多维数组
这里是我的数组:
Array(
[0] = Array (
[ID] => 1,
[USER] => 1,
[AUTHOR] => 2,
[TITLE] => Welcome to the Site!,
[DATETIME] => 2016-09-12 20:41:16,
[MESSAGES] => Array (
[0] => Array (
[ID] => 1,
[CONVERSATION] => 1,
[USER] => 1,
[CONTENT] => Welcome to the site User!,
[DATETIME] => 2016-09-13 00:19:20
)
[1] => Array (
[ID] => 2,
[CONVERSATION] => 1,
[USER] => 2,
[CONTENT] => Thanks for welcoming me!,
[DATETIME] => 2016-09-13 00:27:54
)
)
[1] = Array (
[ID] => 2,
[USER] => 2,
[AUTHOR] => 1,
[TITLE] => Hello World!,
[DATETIME] => 2016-09-13 00:29:59,
[MESSAGES] => Array (
[0] => Array (
[ID] => 1,
[CONVERSATION] => 1,
[USER] => 1,
[CONTENT] => This is a test post.,
[DATETIME] => 2016-09-13 00:19:45
)
[1] => Array (
[ID] => 2,
[CONVERSATION] => 1,
[USER] => 2,
[CONTENT] => This is an example response.,
[DATETIME] => 2016-09-13 00:45:04
)
)
)
我想要做的是组织使用的是最新消息的日期时间谈话的数组,以便与最新的消息谈话会首先,与第二大部分的谈话最近的消息将是第二个等等。我一直在寻找不同的功能,如
array_multisort
array_sort
usort
我已经找到其他的解决方案在线,但他们不完全匹配什么我在寻找因此,没有人知道组织这些聊天信息的最佳方式?
答
好了,所以搜索类似地雷和测试其他职位和修改代码的年龄后,我找到了答案,我的解决方案:
$datetimes = array();
$recentDate = 0;
foreach($conversations as $conversation) {
foreach($conversation["MESSAGES"] as $message) {
$curDate = strtotime($message["DATETIME"]);
if($curDate > $recentDate) {
$recentDate = $curDate;
}
}
$datetimes[] = $recentDate;
}
array_multisort($datetimes, SORT_DESC, $conversations);
这个排序每个基于了与最近的消息谈话的谈话。
也许这有助于http://*.com/questions/20805143/php-converting-multidimensional-array-to-modified-pre-order-traversal-tree –
我不知道如何实现它到我的代码, 能否请你帮忙? – Elxafil