You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 08:48:22