本文介绍如何将 php 数组中以逗号分隔的复合键(如 'a,b')拆解,并将其对应值累加到各独立关键词(如 'a' 和 'b')上,最终得到按单个键归并统计的结果。
在实际开发中,尤其是处理标签、分类或多维度统计场景时,常会遇到类似这样的数组结构:
$arr = [
'A' => 5,
'B' => 1,
'A,B' => 5
];其语义是:关键词 A 出现了 5 次,B 出现了 1 次,而组合 A,B 同时出现(可理解为同时命中 A 和 B)共 5 次。因此,若需统计每个关键词的总覆盖次数,则 A 应为 5 + 5 = 10,B 应为 1 + 5 = 6。
实现该逻辑的核心思路是:
以下是完整、健壮的实现代码:
$arr = ['A' => 5, 'B' => 1, 'A,B' => 5];
$result = [];
array_walk($arr, function ($value, $key) use (&$result) {
$subKeys = array_map('trim', explode(',', $key)); // 自动去除空格,增强鲁棒性
foreach ($subKeys as $subKey) {
if ($subKey === '') continue; // 跳过空键(如 ',A,' 拆出的空字符串)
$result[$subKey] = ($result[$subKey] ?? 0) + $value;
}
});
print_r($result);
// 输出:
// Array
// (
// [A] => 10
// [B] => 6
// )✅ 关键优化说明:
⚠️ 注意事项:
HP 会自动覆盖,建议确保键唯一; 该方案简洁高效,适用于中小型数据集;若需处理超大规模数组或高频调用,可进一步封装为函数并添加类型声明(PHP 7.4+)以提升可维护性。