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

合并PHP数组中重复sys_ID对应的service值并去重

PHP数组合并:重复sys_ID对应的service值拼接

没问题,我来帮你搞定这个数组合并的需求。这里有个高效的解决方案,能把重复sys_ID的service值合并成逗号分隔的字符串,同时去除重复项:

完整代码示例

<?php
// 初始化主数据数组(sys_ID根据实际场景获取,这里用示例值)
$data = [
    'sys_ID' => 'ab0ce921dba8a810f6db3892399619d9'
];

// 从POST参数生成初始sites数组
foreach ($_POST['services'] as $item) {
    $parts = explode(',', $item);
    $siteID = $parts[1];
    $services = $parts[0];
    $data['sites'][] = [
        'sys_ID' => $siteID,
        'service' => $services
    ];
}

// 核心:合并重复的sites项
$tempSites = [];
foreach ($data['sites'] as $site) {
    $sysId = $site['sys_ID'];
    if (isset($tempSites[$sysId])) {
        // 检查当前service是否已存在,避免重复拼接(可选,根据业务场景调整)
        $existingServices = explode(',', $tempSites[$sysId]['service']);
        if (!in_array($site['service'], $existingServices)) {
            $tempSites[$sysId]['service'] .= ',' . $site['service'];
        }
    } else {
        $tempSites[$sysId] = $site;
    }
}

// 将关联数组转换为索引数组,匹配需求结构
$data['sites'] = array_values($tempSites);

// 验证结果(可选)
print_r($data);
?>

代码解释

  • 临时关联数组存储:用$tempSites这个关联数组,以sys_ID作为键,这样可以快速判断当前site是否已经存在,避免多次遍历索引数组,效率更高。
  • service拼接逻辑:如果sys_ID已存在,就把当前的service追加到已有值后面;加了重复检查是为了防止同一个service被多次拼接(比如POST参数里不小心传了两次同一个service给同一个site),如果你的业务场景不会出现这种情况,可以去掉重复检查,直接拼接。
  • 转换为索引数组:最后用array_values()把关联数组转成连续的数字索引数组,完全匹配你需要的最终结构。

效果验证

运行这段代码后,你得到的数组就会和需求里的结构一致:重复sys_ID的项被合并,service值用逗号分隔,多余的重复项被删除。

内容的提问来源于stack exchange,提问作者Josh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 21:27:52