合并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
相关产品推荐
相关产品推荐

