2016-09-18 209 views
0

因此,我正在为正在开发的项目开发一个消息系统,并且希望通过最新消息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 

我已经找到其他的解决方案在线,但他们不完全匹配什么我在寻找因此,没有人知道组织这些聊天信息的最佳方式?

+0

也许这有助于http://stackoverflow.com/questions/20805143/php-converting-multidimensional-array-to-modified-pre-order-traversal-tree –

+0

我不知道如何实现它到我的代码, 能否请你帮忙? – Elxafil

回答

0

好了,所以搜索类似地雷和测试其他职位和修改代码的年龄后,我找到了答案,我的解决方案:

$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); 

这个排序每个基于了与最近的消息谈话的谈话。