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

求助:PHP多维数组按ID重新分组为指定结构(附代码)

解决按连续ID分组多维数组的问题

看起来你想要的是按原始数组中连续出现的相同ID进行分组,而不是把所有同ID的元素合并到一起(你的尝试是把所有同ID的归为一组,但目标数组是按连续块来划分的)。下面是实现这个需求的代码:

$original_arr = [
    ['id' => 17, 'content' => 'string...?'],
    ['id' => 20, 'content' => 'hello'],
    ['id' => 20, 'content' => 'string...?'],
    ['id' => 20, 'content' => 'string...string...??'],
    ['id' => 17, 'content' => 'string...'],
    ['id' => 17, 'content' => 'string...'],
];

$desired_arr = [];
$current_id = null;
$current_group = [];

foreach ($original_arr as $item) {
    // 如果当前元素的ID和当前分组的ID不同,就把之前的分组加入结果(如果存在)
    if ($item['id'] !== $current_id) {
        if (!is_null($current_id)) {
            $desired_arr[] = [$current_id => $current_group];
        }
        $current_id = $item['id'];
        $current_group = [];
    }
    // 将当前元素的content加入当前分组
    $current_group[] = $item['content'];
}

// 别忘了把最后一个未加入的分组添加到结果里
if (!is_null($current_id)) {
    $desired_arr[] = [$current_id => $current_group];
}

echo "<pre>";
print_r($desired_arr);
echo "</pre>";

代码逻辑说明

  • 用$current_id跟踪当前连续块的ID,$current_group存储当前块的所有content内容
  • 遍历原始数组时,判断当前元素ID是否和$current_id一致:
    • 不一致则代表上一个连续块结束,将其存入结果数组,然后重置当前ID和分组容器
    • 一致则直接把当前元素的content追加到当前分组
  • 遍历结束后,要手动把最后一个连续块加入结果,避免遗漏

运行这段代码后,输出结果完全匹配你想要的$desired_arr:

Array
(
    [0] => Array
        (
            [17] => Array
                (
                    [0] => string...?
                )

        )

    [1] => Array
        (
            [20] => Array
                (
                    [0] => hello
                    [1] => string...?
                    [2] => string...string...??
                )

        )

    [2] => Array
        (
            [17] => Array
                (
                    [0] => string...
                    [1] => string...
                )

        )

)

为什么你的原有方法不符合预期?

你之前的group_by_key函数是把所有相同ID的元素按原始索引归为一组,后续用+=合并数组的操作,只是把所有元素按原始索引重新排列,并没有实现按连续出现的ID块分组的核心逻辑,所以得到的结果和预期不符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 09:33:17