如何将数组求和为单个值并保留在数组中?附日期统计函数示例
解答你的两个问题
一、数组求和并将结果保留在数组中
这事儿其实挺简单的,用PHP内置的array_sum()函数就能快速算出数组元素的总和,之后把结果加到数组的开头或者末尾就行。给你举个实际的例子:
// 假设这是你的目标数组 $myArray = [5, 8, 12, 3]; // 计算数组所有元素的总和 $total = array_sum($myArray); // 将总和添加到数组末尾(这是比较常用的做法) $myArray[] = $total; // 要是你想把总和放在数组开头,就用unshift() // array_unshift($myArray, $total); // 现在数组就变成了 [5,8,12,3,28]
小提示:array_sum()会自动忽略数组里的非数值元素(比如字符串);如果是关联数组,它只会对所有值求和,键名不会影响结果。
二、完善按日期获取数据的函数
看了你给出的graphheheByDate函数,我帮你补全并优化了几个关键地方,让代码更严谨、更简洁:
use Illuminate\Support\Facades\DB; use Illuminate\Http\Request; public function graphheheByDate(Request $request, $companyID) { // 先验证日期参数的合法性,避免无效请求导致数据库出错 $request->validate([ 'from' => 'required|date', 'to' => 'required|date|after_or_equal:from', ]); // 解码公司ID(确保你的decode方法逻辑是正确的) $decodedCompanyID = $this->decode($companyID); $matchData = DiraChatLog::where('status', 'Match') // 用whereBetween简化日期范围查询,比两个where条件更直观 ->whereBetween('date_access', [$request->from, $request->to]) // 提取日期部分并统计每日数量,这里也可以用DB::raw()替代selectRaw ->selectRaw('DATE(date_access) as date, COUNT(*) as cnt') // 必须按日期分组!不然统计结果会变成整个时间范围的总数,不是按天统计 ->groupBy('date') // 按日期升序排序,符合时间序列的展示需求 ->orderBy('date', 'asc') ->get(); return $matchData; }
几个重要的优化点:
- 增加参数验证:确保
from和to是合法日期,且to不早于from,从源头避免无效查询。 - 用
whereBetween简化日期范围查询,代码可读性更强。 - 补上了
groupBy('date'):这是按天统计数据的核心步骤,没分组的话统计结果就不对了。 - 补全了
orderBy的具体字段和排序方向,保证返回的数据是按时间顺序排列的。
内容的提问来源于stack exchange,提问作者Rajveer Singh
相关产品推荐
相关产品推荐

