【问题标题】:Sort Multidimensional Array by Array Value按数组值排序多维数组
【发布时间】:2017-01-26 02:02:22
【问题描述】:

所以我正在为我正在进行的项目开发一个消息系统,我想按最新的消息日期时间组织一系列对话。

这是我的数组:

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

我在网上找到了其他解决方案,但它们与我正在寻找的不太匹配,所以有人知道组织这些聊天消息的最佳方式吗?

【问题讨论】:

标签: php mysql arrays sorting multidimensional-array


【解决方案1】:

好的,经过多年搜索与我类似的其他帖子以及测试和修改代码后,我找到了解决方案的答案:

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

这会根据与最近消息的对话对每个对话进行排序。

【讨论】:

    猜你喜欢
    • 2023-04-02
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多