讲师中心 微信公众号
AI工具推荐 视频效率加速

如何将多维数组按颜色分组并根据尺寸数量动态生成嵌套结构

星磊吖_2219

星磊吖_2219

发布时间:2026-10-12 14:58:04

|

178人浏览过

|

来源于php中文网

原创

如何将多维数组按颜色分组并根据尺寸数量动态生成嵌套结构

本文介绍如何在 PHP 中对商品数据数组按 color 分组,并为每个颜色下的 size 项构建灵活的嵌套结构:当某颜色仅有一种尺寸时,直接以字符串和 count 字段平铺输出;含多种尺寸时,则生成 size 数组子对象。

本文介绍如何在 php 中对商品数据数组按 `color` 分组,并为每个颜色下的 `size` 项构建灵活的嵌套结构:当某颜色仅有一种尺寸时,直接以字符串和 `count` 字段平铺输出;含多种尺寸时,则生成 `size` 数组子对象。

在电商或库存管理类应用中,常需将扁平的商品属性数组(如 color、size、count)聚合成更具语义的层级结构,以适配前端渲染或 API 响应规范。本教程提供一种清晰、可维护的 PHP 实现方案,支持动态深度结构——即根据每种颜色关联的尺寸数量,自动选择扁平字段或嵌套数组格式。

核心思路:两阶段处理

  1. 归集阶段:以 color 为键,构建二维关联数组 $colors[$color][$size] = $count;
  2. 结构化阶段:遍历归集结果,判断每种颜色的尺寸数量,决定 size 字段是单值字符串 + count,还是含多个 {value, count} 对象的数组。

完整实现代码

<?php
$array = [
    ['color' => '#000000', 'size' => 'L',  'count' => 2],
    ['color' => '#000000', 'size' => 'XL', 'count' => 1],
    ['color' => '#ffffff', 'size' => 'L',  'count' => 2],
    ['color' => '#ffffff', 'size' => 'XL', 'count' => 1],
    ['color' => '#ff0000', 'size' => 'L',  'count' => 1]
];

// 阶段一:按 color → size 归集 count
$colors = [];
foreach ($array as $row) {
    $colors[$row['color']][$row['size']] = $row['count'];
}

// 阶段二:构建目标结构(支持单尺寸扁平化 & 多尺寸嵌套)
$output = [];
foreach ($colors as $color => $sizes) {
    $sizeEntries = [];
    foreach ($sizes as $size => $count) {
        $sizeEntries[] = ['value' => $size, 'count' => $count];
    }

    if (count($sizeEntries) === 1) {
        // 单尺寸:平铺为 color + size(string) + count
        $output[] = [
            'color' => $color,
            'size'  => $sizeEntries[0]['value'],
            'count' => $sizeEntries[0]['count']
        ];
    } else {
        // 多尺寸:size 为对象数组
        $output[] = [
            'color' => $color,
            'size'  => $sizeEntries
        ];
    }
}

// 输出标准化 JSON(带缩进,便于调试)
echo json_encode($output, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
?>

输出结果(符合题目要求)

[
    {
        "color": "#000000",
        "size": [
            {
                "value": "L",
                "count": 2
            },
            {
                "value": "XL",
                "count": 1
            }
        ]
    },
    {
        "color": "#ffffff",
        "size": [
            {
                "value": "L",
                "count": 2
            },
            {
                "value": "XL",
                "count": 1
            }
        ]
    },
    {
        "color": "#ff0000",
        "size": "L",
        "count": 1
    }
]

注意事项与最佳实践

  • ✅ 避免 extract():原答案中使用 extract() 虽简洁,但存在变量污染与安全风险(尤其在不可信数据场景),本实现改用显式键访问,更健壮、易调试;
  • ✅ 无重复校验假设:代码默认输入中不存在相同 color+size 的重复项;若存在,后出现的 count 将覆盖前者——如需累加,可将 $colors[$row['color']][$row['size']] += $row['count'];;
  • ✅ 可封装为函数:建议将逻辑封装为 groupProductsByColor(array $data): array,提升复用性与测试友好度;
  • ⚠️ 字符大小写敏感:示例中 "XL" 与 "Xl" 视为不同尺寸,如需忽略大小写,可在归集前统一 strtolower($row['size'])。

该方案兼顾可读性、扩展性与生产安全性,适用于中等规模数据聚合场景。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

火山引擎

火山引擎是一款面向企业的云计算与AI服务平台。

Laper
Laper Hot

Laper是专为编剧、导演和制片人推出的 AI 原生剧本创作工具。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

切问学术

切问学术是一款AI论文写作工具,复旦大学NLP团队推出的AI学术智能体。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

相关专题

更多
switch语句用法
switch语句用法

switch语句用法:1、Switch语句只能用于整数类型,枚举类型和String类型,不能用于浮点数类型和布尔类型;2、每个case语句后面必须跟着一个break语句,以防止执行其他case的代码块,没有break语句,将会继续执行下一个case的代码块;3、可以在一个case语句中匹配多个值,使用逗号分隔;4、Switch语句中的default代码块是可选的等等。

1051

2023.09.21

Java switch的用法
Java switch的用法

Java中的switch语句用于根据不同的条件执行不同的代码块。想了解更多switch的相关内容,可以阅读本专题下面的文章。

1397

2024.03.13

php中foreach用法
php中foreach用法

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

738

2025.12.04

PixTV官网入口地址合集
PixTV官网入口地址合集

本专题汇总了 PixTV AI 一站式视频创作平台的官方入口与使用教程。无需下载软件,浏览器直接访问即可使用。平台将剧本、图像、视频、声音与剪辑整合在“无限画布”中,接入 GPT Image 2.5、Seedance 2.5 等头部模型。本专题整理了从新建画布、角色锚定、分镜拆分到视频生成与导出的完整操作指南,助你快速上手 AI 短剧与漫剧创作。

20

2026.10.10

Kratos框架HTTP与gRPC服务开发教程
Kratos框架HTTP与gRPC服务开发教程

本专题围绕Kratos框架双协议服务开发,涵盖HTTP路由与处理器编写、参数获取、gRPC服务实现与客户端调用、metadata上下文传递、encoding编解码注册、统一响应封装、超时控制与流式响应实现方法。

20

2026.10.10

Kratos框架Protobuf接口定义与代码生成合集
Kratos框架Protobuf接口定义与代码生成合集

本专题讲解Kratos框架接口定义体系,涵盖proto编写规范、proto add/client/server生成命令、http注解路由、validate校验、OpenAPI文档生成、跨服务proto复用与兼容性设计。

0

2026.10.10

C++虚函数怎么定义和调用
C++虚函数怎么定义和调用

C++虚函数是实现运行时多态的重要机制。本专题从virtual关键字的基本用法入手,介绍基类与派生类之间的函数重写、基类指针调用派生类方法,以及动态绑定的执行过程,帮助初学者掌握虚函数的核心语法。

20

2026.10.10

C++类与对象的封装方法教程
C++类与对象的封装方法教程

C++封装是面向对象编程的核心特性之一,通过类将数据与操作数据的函数组织在一起,并利用访问权限控制外部访问。本专题介绍类的定义、成员变量、成员函数以及public、private和protected的使用方法,帮助初学者掌握封装的基本原理。

20

2026.10.10

C++构造函数定义与调用方法
C++构造函数定义与调用方法

C++构造函数用于初始化类对象,是面向对象编程的重要基础。本专题从构造函数的定义、声明和调用入手,介绍默认构造函数、带参数构造函数、拷贝构造函数及成员初始化列表,帮助初学者掌握对象创建与初始化的基本方法。

20

2026.10.10

热门下载

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

精品课程

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn