将SQL Salespeople表数据重组为层级化多维PHP数组
实现步骤
1. 先通过SQL聚合数据
先把原表中重复的销售记录合并,按销售人员、商品、单价、日期分组计算总售出数量,减少后续PHP处理的复杂度:
SELECT `销售人员`, `售出商品`, `单价`, `售出日期`, SUM(`数量`) AS `总数量` FROM Salespeople GROUP BY `销售人员`, `售出商品`, `单价`, `售出日期`;
执行后得到的聚合数据如下:
| 销售人员 | 售出商品 | 单价 | 售出日期 | 总数量 |
|---|---|---|---|---|
| Jimmy | Lemonade | 12 | 2020-01-02 | 8 |
| Terrence | Gym Equipment | 34 | 2020-01-03 | 6 |
| Jimmy | Lemonade | 15 | 2020-01-04 | 3 |
| Jimmy | Gym Equipment | 20 | 2020-01-04 | 9 |
2. PHP构建层级数组
步骤1:定义基础数据
先明确需要覆盖的日期范围,初始化结果数组:
// 要覆盖的所有目标日期 $dates = ['2020-01-02', '2020-01-03', '2020-01-04']; // 最终的层级化数组容器 $result = [];
步骤2:填充聚合数据到数组
遍历SQL查询返回的每行数据,按层级嵌套填充:
// 假设$salesData是SQL查询返回的关联数组集合 foreach ($salesData as $row) { $salesperson = $row['销售人员']; $product = $row['售出商品']; $price = $row['单价']; $date = $row['售出日期']; $qty = $row['总数量']; // 初始化销售人员层级 if (!isset($result[$salesperson])) { $result[$salesperson] = []; } // 用「商品_单价」作为唯一键区分同一商品不同单价的记录 $productPriceKey = "{$product}_{$price}"; if (!isset($result[$salesperson][$productPriceKey])) { // 先给所有日期默认设为0 $result[$salesperson][$productPriceKey] = [ '售出商品' => $product, '单价' => $price, '日期销售数据' => array_fill_keys($dates, 0) ]; } // 填充对应日期的实际销售数量 $result[$salesperson][$productPriceKey]['日期销售数据'][$date] = $qty; }
步骤3:优化数组结构(可选)
如果不需要「商品_单价」的中间键,可以调整成更直观的数组结构:
$finalResult = []; foreach ($result as $salesperson => $productItems) { $finalResult[$salesperson] = []; foreach ($productItems as $item) { $finalResult[$salesperson][] = $item; } }
最终得到的$finalResult结构如下,完全匹配你要的层级逻辑:
[ 'Jimmy' => [ [ '售出商品' => 'Lemonade', '单价' => 12, '日期销售数据' => [ '2020-01-02' => 8, '2020-01-03' => 0, '2020-01-04' => 0 ] ], [ '售出商品' => 'Lemonade', '单价' => 15, '日期销售数据' => [ '2020-01-02' => 0, '2020-01-03' => 0, '2020-01-04' => 3 ] ], [ '售出商品' => 'Gym Equipment', '单价' => 20, '日期销售数据' => [ '2020-01-02' => 0, '2020-01-03' => 0, '2020-01-04' => 9 ] ] ], 'Terrence' => [ [ '售出商品' => 'Gym Equipment', '单价' => 34, '日期销售数据' => [ '2020-01-02' => 0, '2020-01-03' => 6, '2020-01-04' => 0 ] ] ] ]
内容的提问来源于stack exchange,提问作者Jason Chen
相关产品推荐
相关产品推荐

