You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按连续相同is_author值分组消息?JS/PHP有什么高效实现方案?

消息连续分组转换实现方案

两种实现均为单次遍历方案,时间复杂度为O(n),空间复杂度为O(n),没有冗余计算,性能最优。

JavaScript 实现

function groupMessages(messages) {
    const result = [];
    let currentGroup = null;
    for (const msg of messages) {
        const { is_author, ...msgData } = msg;
        if (!currentGroup || currentGroup.is_author !== is_author) {
            currentGroup = {
                is_author,
                messages: []
            };
            result.push(currentGroup);
        }
        currentGroup.messages.push(msgData);
    }
    return result;
}

直接传入原始消息数组调用即可得到符合要求的输出结构。

PHP 实现

function groupMessages(array $messages): array
{
    $result = [];
    $currentGroup = null;
    foreach ($messages as $msg) {
        $isAuthor = $msg['is_author'];
        $msgData = $msg;
        unset($msgData['is_author']);
        
        if ($currentGroup === null || $currentGroup['is_author'] !== $isAuthor) {
            unset($currentGroup);
            $currentGroup = [
                'is_author' => $isAuthor,
                'messages' => []
            ];
            $result[] = &$currentGroup;
        }
        $currentGroup['messages'][] = $msgData;
    }
    unset($currentGroup);
    return $result;
}

内容的提问来源于stack exchange,提问作者Alex Oraniewsky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 18:48:04