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

如何合并多个单元素数组并使用array_sum计算总和?

解决方案

方法一:合并数组后求和

把数组初始化放到循环外部,每次循环将价格追加到数组中,最后用array_sum计算总和:

// 循环外初始化空数组
$prices = [];
// 假设这是遍历关键词的循环逻辑
foreach ($keywords as $keyword) {
    $price = row_select('keyword_type_price', ['keyword_type_id' => $keyword['keyword_type'], 'word' => $keyword['word']], ['price'])['price'];
    // 将价格追加到数组,空值会被array_sum自动视为0
    $prices[] = $price;
}
// 计算总和
$total = array_sum($prices);
printR($total);

方法二:直接累加求和(无需数组)

如果只需要最终总和,不需要保存所有价格数据,可以直接在循环内累加,节省内存开销:

$total = 0;
foreach ($keywords as $keyword) {
    $price = row_select('keyword_type_price', ['keyword_type_id' => $keyword['keyword_type'], 'word' => $keyword['word']], ['price'])['price'];
    // 空值转为0后累加
    $total += $price ?? 0;
}
printR($total);

更优实现:用SQL直接求和(减少数据库查询)

原代码每次循环发起一次数据库查询,效率极低。可以通过SQL批量查询并直接求和,仅需一次数据库请求:

// 先构造批量查询的条件
$whereConditions = [];
foreach ($keywords as $keyword) {
    // 注意对字符串参数做转义,防止SQL注入
    $escapedWord = mysqli_real_escape_string($yourDbConn, $keyword['word']);
    $whereConditions[] = "(keyword_type_id = {$keyword['keyword_type']} AND word = '{$escapedWord}')";
}
$whereClause = implode(' OR ', $whereConditions);

// 执行求和查询
$sql = "SELECT SUM(price) AS total_price FROM keyword_type_price WHERE {$whereClause}";
// 根据实际数据库查询方法执行SQL,这里假设用row_select适配
$result = row_select($sql);
$total = $result['total_price'] ?? 0;
printR($total);

注:如果你的row_select函数不支持自定义SQL,需要改用对应的数据库执行方法;必须做好SQL注入防护,对字符串类型的参数进行转义处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 04:48:21