0

0

如何将扁平数组按 list_id 聚合为结构化多维数组

花韻仙語

花韻仙語

发布时间:2026-02-04 11:35:01

|

227人浏览过

|

来源于php中文网

原创

如何将扁平数组按 list_id 聚合为结构化多维数组

本文介绍一种高效、简洁的 php 方式,将含重复 `list_id` 的扁平数组重组为以列表为单位的多维结构:每个顶层元素代表一个唯一购物清单(含 `list_id` 和 `order_list_name`),其下子数组聚合所有对应商品项。

在处理订单、购物清单或分组报表类数据时,常遇到原始数据按“行”展开(每行含清单头信息 + 单条商品),但业务逻辑需要按“清单维度”组织——即每个清单只保留一次头部信息,其后紧跟所有关联商品。这种结构转换不宜依赖嵌套 foreach 或手动索引维护,而应利用 PHP 的关联键临时分组 + array_values() 重置索引这一经典模式。

✅ 推荐实现(健壮清晰版)

$grouped = [];
foreach ($records as $record) {
    $listId = $record['list_id'];

    // 首次出现该 list_id 时,初始化清单头信息
    if (!isset($grouped[$listId])) {
        $grouped[$listId] = [
            'list_id'         => $listId,
            'order_list_name' => $record['order_list_name']
        ];
    }

    // 将当前商品项追加到该清单下(作为数值索引子数组)
    $grouped[$listId][] = [
        'list_id'      => $listId,
        'product_id'   => $record['product_id'] ?? null, // 注意:原答案中误用 $product->xxx,实际应从 $record 取值
        'product_name' => $record['product_name'] ?? '',
        'sku'          => $record['sku'] ?? '',
        'qty'          => $record['qty'] ?? 0
    ];
}

// 移除临时关联键,返回标准数字索引数组
$result = array_values($grouped);
? 关键点说明: 使用 $listId 作为临时关联键(如 '5' => [...], '7' => [...])天然完成分组; isset() 判断避免重复写入头信息,语义明确、性能友好; [] 追加语法自动分配数字键(0, 1, ...),无需手动计数; 最终 array_values() 消除关联键,输出符合预期的纯数字索引结构。

⚠️ 注意事项与常见误区

  • 字段来源一致性:原答案中商品字段误写为 $product->getId() 等对象调用,但输入数据中所有字段均来自 $record 数组。请务必校验实际数据结构,避免 Undefined variable 错误。
  • 空值防护:建议对 product_id、sku 等非必填字段使用 ?? 提供默认值,增强鲁棒性。
  • 性能考量:该方案时间复杂度为 O(n),远优于多次 array_filter() 或递归搜索,适合千级以内数据;超大数据可结合 SplFixedArray 或数据库层聚合优化。
  • 扩展性提示:若需支持多级嵌套(如清单 → 商品 → SKU变体),可在内层再嵌套相同逻辑,保持分治清晰。

✅ 输出验证示例

对原始输入运行上述代码后,将精确生成目标结构:

ARC Lab
ARC Lab

腾讯旗下ARC实验室推出的AI人像修复、抠图和增强工具

下载
Array
(
    [0] => Array
        (
            [list_id] => 5
            [order_list_name] => meri list 3
            [0] => Array
                (
                    [list_id] => 5
                    [product_id] => 1
                    [product_name] => DUCHESS WHITE WINE 200 ml
                    [sku] => SKU0001
                    [qty] => 2
                )
            [1] => Array
                (
                    [list_id] => 5
                    [product_id] => 2
                    [product_name] => CONNEXION DOUBLE ROCK 350 ml, Pack of 2
                    [sku] => SKU0002
                    [qty] => 8
                )
        )
    [1] => Array
        (
            [list_id] => 7
            [order_list_name] => meri list 9
            [0] => Array
                (
                    [list_id] => 7
                    [product_id] => 2
                    [product_name] => CONNEXION DOUBLE ROCK 350 ml, Pack of 2
                    [sku] => SKU0002
                    [qty] => 2
                )
        )
)

掌握这种“临时键分组 + 索引重置”范式,不仅能解决清单聚合问题,还可迁移至用户行为归集、日志按会话分组、API 响应结构标准化等各类 PHP 数据整形场景。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
php中foreach用法
php中foreach用法

本专题整合了php中foreach用法的相关介绍,阅读专题下面的文章了解更多详细教程。

119

2025.12.04

treenode的用法
treenode的用法

​在计算机编程领域,TreeNode是一种常见的数据结构,通常用于构建树形结构。在不同的编程语言中,TreeNode可能有不同的实现方式和用法,通常用于表示树的节点信息。更多关于treenode相关问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

539

2023.12.01

C++ 高效算法与数据结构
C++ 高效算法与数据结构

本专题讲解 C++ 中常用算法与数据结构的实现与优化,涵盖排序算法(快速排序、归并排序)、查找算法、图算法、动态规划、贪心算法等,并结合实际案例分析如何选择最优算法来提高程序效率。通过深入理解数据结构(链表、树、堆、哈希表等),帮助开发者提升 在复杂应用中的算法设计与性能优化能力。

21

2025.12.22

深入理解算法:高效算法与数据结构专题
深入理解算法:高效算法与数据结构专题

本专题专注于算法与数据结构的核心概念,适合想深入理解并提升编程能力的开发者。专题内容包括常见数据结构的实现与应用,如数组、链表、栈、队列、哈希表、树、图等;以及高效的排序算法、搜索算法、动态规划等经典算法。通过详细的讲解与复杂度分析,帮助开发者不仅能熟练运用这些基础知识,还能在实际编程中优化性能,提高代码的执行效率。本专题适合准备面试的开发者,也适合希望提高算法思维的编程爱好者。

32

2026.01.06

undefined是什么
undefined是什么

undefined是代表一个值或变量不存在或未定义的状态。它可以作为默认值来判断一个变量是否已经被赋值,也可以用于设置默认参数值。尽管在不同的编程语言中,undefined可能具有不同的含义和用法,但理解undefined的概念可以帮助我们更好地理解和编写程序。本专题为大家提供undefined相关的各种文章、以及下载和课程。

5452

2023.07.31

网页undefined是什么意思
网页undefined是什么意思

网页undefined是指页面出现了未知错误的意思,提示undefined一般是在开发网站的时候定义不正确或是转换不正确,或是找不到定义才会提示undefined未定义这个错误。想了解更多的相关内容,可以阅读本专题下面的文章。

3116

2024.08.14

网页undefined啥意思
网页undefined啥意思

本专题整合了undefined相关内容,阅读下面的文章了解更多详细内容。后续继续更新。

812

2025.12.25

数据库三范式
数据库三范式

数据库三范式是一种设计规范,用于规范化关系型数据库中的数据结构,它通过消除冗余数据、提高数据库性能和数据一致性,提供了一种有效的数据库设计方法。本专题提供数据库三范式相关的文章、下载和课程。

362

2023.06.29

抖音网页版入口与视频观看指南 抖音官网视频在线访问
抖音网页版入口与视频观看指南 抖音官网视频在线访问

本专题汇总了抖音网页版的入口链接、官方登录页面以及视频观看入口,帮助用户快速访问抖音网页版,提供免登录访问方式和直接进入视频播放页面的方法,确保顺利浏览和观看抖音视频。

0

2026.02.04

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 11万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 11.2万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号