
本文讲解如何在循环中动态收集多个价格值并求和,避免每次覆盖数组,通过正确初始化和追加元素实现高效累加。
本文讲解如何在循环中动态收集多个价格值并求和,避免每次覆盖数组,通过正确初始化和追加元素实现高效累加。
在实际开发中,我们常需遍历数据集(如关键词列表),逐条查询对应价格,并最终计算总金额。但若像原始代码中每次执行 $array = [$price];,则每次都会新建一个单元素数组,导致前序结果被完全丢弃——最终只能看到最后一次的 printR($array) 输出,无法聚合全部数据。
正确做法是:提前初始化空数组,并在循环内使用 $array[] = $price; 语法追加元素。该语法等价于 array_push($array, $price),但更简洁高效,且自动忽略空值(需额外处理)。
✅ 正确示例代码:
// 1. 循环前初始化空数组
$prices = [];
foreach ($keywords as $keyword) {
$price = row_select('keyword_type_price', [
'keyword_type_id' => $keyword['keyword_type'],
'word' => $keyword['word']
], ['price'])['price'];
// 2. 追加到数组(注意:不是重新赋值!)
$prices[] = $price;
}
// 3. 安全求和:过滤空值/非数字项,再累加
$validPrices = array_filter($prices, function($v) {
return is_numeric($v) && $v !== null && $v !== '';
});
$total = array_sum($validPrices);
echo "总价:¥" . number_format($total);
⚠️ 注意事项:
- 原始数据中存在大量空值(
Array ([0] => )),直接array_sum()会将空字符串、null视为0,虽不报错但易掩盖逻辑缺陷;建议显式过滤,提升健壮性。 - 若数据库查询可能失败(如无匹配记录),
row_select()可能返回空数组,访问['price']会触发Notice——应增加判空处理,例如:$result = row_select(/* ... */); $price = !empty($result['price']) ? (float)$result['price'] : 0;
总结:数组累加的核心在于「一次初始化 + 循环追加」,而非重复声明。配合类型校验与空值过滤,即可安全、清晰、高效地完成数值汇总任务。










