PHP三层数组转置:保留中间关联键,重组适配表格生成
实现PHP三层数组的转置(横向cells重组为纵向分组)
需求说明
需要将现有横向结构的数组,转置为纵向分组结构:把原数组中每个子数组cells里同索引的元素,合并到新数组对应子数组的cells中,最终生成适合表格展示的纵向分组数组。
原数组结构
Array ( [0] => Array ( [cells] => Array ( [0] => DEPOTS [1] => PRICES ) ) [1] => Array ( [cells] => Array ( [0] => 50 [1] => 25 ) ) [2] => Array ( [cells] => Array ( [0] => 100 [1] => 50 ) ) )
目标数组结构
Array ( [0] => Array ( [cells] => Array ( [0] => DEPOTS [1] => 50 [2] => 100 ) ) [1] => Array ( [cells] => Array ( [0] => PRICES [1] => 25 [2] => 50 ) ) )
解决方案代码
$transposed = []; // 遍历原数组的每一行数据 foreach ($bonus_table as $row) { // 遍历当前行的cells,获取索引与对应值 foreach ($row['cells'] as $index => $value) { // 初始化结果数组的对应项(如果不存在) if (!isset($transposed[$index])) { $transposed[$index] = ['cells' => []]; } // 将值追加到对应分组的cells中 $transposed[$index]['cells'][] = $value; } } // 重置数组索引为连续递增的数字(可选,确保结构规整) $transposed = array_values($transposed); return $transposed;
代码逻辑说明
- 初始化空数组
$transposed存储转置结果 - 外层循环遍历原数组的每个子项(即每一行表格数据)
- 内层循环遍历当前行的
cells数组,通过索引$index定位到结果数组的对应分组 - 若结果数组中未创建对应分组,先初始化一个包含空
cells的子数组 - 将当前值追加到对应分组的
cells数组,完成纵向合并 - 最后用
array_values()重置索引,确保数组索引为连续的0、1、2...(如果原cells的索引本来就是连续的,此步骤可省略)
原代码问题分析
你原本使用array_merge($row['cells'], $arr3)的方式,只是将每个cells数组的元素按顺序横向拼接,没有实现按索引分组的纵向合并,因此无法得到目标结构。
内容的提问来源于stack exchange,提问作者Epi94
相关产品推荐
相关产品推荐

