本文详解如何将 php 关联数组中含逗号分隔符的复合键(如 'a,b')自动拆解,并将其对应值累加到各子键(如 'a' 和 'b')上,最终生成按原子键聚合统计的新数组。
在实际开发中,尤其是处理标签、权限、多选字段等场景时,常会遇到以逗号分隔的复合键数组,例如:['A' => 5, 'B' => 1, 'A,B' => 5]。此时若需按单个维度(如独立标签 A、B)进行统计汇总,不能直接使用 count() 或 array_sum(),而需对键名进行解析与值的归并。
核心思路是:遍历原数组,对每个键执行 explode(',', $key) 拆分,再将当前值累加至每个子键对应的结果中。以下为推荐实现:
$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 (isset($result[$subKey])) {
$result[$subKey] += $value;
} else {
$result[$subKey] = $value;
}
}
});
print_r($result);
// 输出:
// Array
// (
// [A] => 10
// [B] => 6
// )✅ 关键优化点说明:
⚠️ 注意事项:
立即学习“PHP免费学习笔记(深入)”;
该方法简洁、高效
、可读性强,适用于各类键值聚合统计需求,是 PHP 数组高级操作的典型实践。