如何合并多个单元素数组并使用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
相关产品推荐
相关产品推荐

