PHP二维数组按d、s分层分组,拼接i字段值的实现方法
PHP二维数组转嵌套关联数组(按d、s分组拼接i值)
需求:将给定二维数组转换为嵌套关联数组,规则如下:
- 以数组元素的
d字段值作为一级键名 - 以数组元素的
s字段值作为二级键名 - 相同
d和s分组下的i字段值,以逗号分隔拼接成二级键对应的值
输入数组:
$array = [ ["d" => "7 Apr 2024", "s" => "pm", "i" => "el"], ["d" => "8 Apr 2024", "s" => "am", "i" => "mn"], ["d" => "12 Apr 2024", "s" => "pm", "i" => "mr"], ["d" => "12 Apr 2024", "s" => "am", "i" => "mr"], ["d" => "12 Apr 2024", "s" => "am", "i" => "da"], ["d" => "13 Apr 2024", "s" => "pm", "i" => "li"], ["d" => "14 Apr 2024", "s" => "am", "i" => "li"], ["d" => "15 Apr 2024", "s" => "mid", "i" => "nd"], ["d" => "15 Apr 2024", "s" => "pm", "i" => "da"] ];
期望输出数组:
[ "7 Apr 2024" => ["pm" => "el"], "8 Apr 2024" => ["am" => "mn"], "12 Apr 2024" => ["am" => "mr,da", "pm" => "mr"], "13 Apr 2024" => ["pm" => "li"], "14 Apr 2024" => ["am" => "li"], "15 Apr 2024" => ["pm" => "da", "mid" => "nd"] ]
解决方案
用单循环即可实现,核心逻辑是遍历每个元素时,检查一级键(d值)和二级键(s值)是否已存在:
- 若一级键不存在,直接初始化该键对应的数组,包含当前
s和i的映射 - 若一级键存在但二级键不存在,添加该二级键和对应的
i值 - 若一级键和二级键都存在,将当前
i值以逗号拼接至已有值后
代码实现:
$result = []; foreach ($array as $item) { $d = $item['d']; $s = $item['s']; $i = $item['i']; if (!isset($result[$d])) { $result[$d] = [$s => $i]; } else { if (!isset($result[$d][$s])) { $result[$d][$s] = $i; } else { $result[$d][$s] .= ',' . $i; } } } // 打印结果验证 print_r($result);
这段代码会输出符合预期的嵌套关联数组,完美处理相同d和s分组下的i值拼接。
内容的提问来源于stack exchange,提问作者user2016901
相关产品推荐
相关产品推荐

