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

如何对PHP数组中对象的动态键值求和并排除固定键?

解决PHP中仅对关联数组数字键值求和并生成累计total的问题

你的核心问题是需要排除每个子数组中的timeSummary字符串键,仅对数字键对应的值求和,再累加得到累计的total。以下是两种可行的解决方案:

方法一:移除固定非目标键后求和

直接复制子数组并移除已知的timeSummary键,再对剩余元素求和,逻辑简单直接:

$obj1 = [
    "101" => 18,
    "102" => 15,
    "103" => 23,
    "timeSummary" => "2023-04-17 00:00:00"
];
 
$obj2 = [
    "101" => 15,
    "102" => 13,
    "103" => 79,
    "timeSummary" => "2023-04-18 00:00:00"
];
$obj3 = [
    "101" => 50,
    "102" => 50,
    "103" => 62,
    "timeSummary" => "2023-04-19 00:00:00"
];
$testArray = [$obj1, $obj2, $obj3];

$withTotal = [];
$total = 0;
foreach ($testArray as $item) {
    // 复制当前子数组并移除timeSummary键
    $numericData = $item;
    unset($numericData['timeSummary']);
    // 计算当前子数组的数字键总和
    $currentSum = array_sum($numericData);
    // 累加累计total
    $total += $currentSum;
    // 为当前子数组添加累计total后存入结果数组
    $item['total'] = $total;
    $withTotal[] = $item;
}

// 输出结果查看
print_r($withTotal);

方法二:过滤数字键后求和

如果后续可能出现其他非数字键,用array_filter结合键过滤的方式更灵活,自动保留所有数字类型的键:

$withTotal = [];
$total = 0;
foreach ($testArray as $item) {
    // 过滤出键为数字的元素
    $numericItems = array_filter($item, function($key) {
        return is_numeric($key);
    }, ARRAY_FILTER_USE_KEY);
    $currentSum = array_sum($numericItems);
    $total += $currentSum;
    $item['total'] = $total;
    $withTotal[] = $item;
}

说明你之前的错误方法无效的原因

你尝试的if (!$withTotal[$key]['timeSummary'])逻辑完全错误:这个判断是在检查timeSummary的值是否为空,但你的timeSummary都有有效的日期字符串,条件永远不成立,导致根本没有执行求和操作,自然得不到正确结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:08:18