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

如何使用Laravel Map函数处理数据对象和数组,调整输出格式满足需求

修改后可直接运行的代码

// 预先定义月份数字到名称的映射
$monthNames = [
    1 => 'January', 2 => 'February', 3 => 'March', 4 => 'April',
    5 => 'May', 6 => 'June', 7 => 'July', 8 => 'August',
    9 => 'September', 10 => 'October', 11 => 'November', 12 => 'December'
];

$loans = Loan::select('date_release')
               ->where('invalid',false)
               ->where('transaction_year', $transyear)
               ->get()
               ->groupBy(function($date) {
                   return Carbon::parse($date->date_release)->format('m'); // 按月份分组
               });

$loanmcount = [];
$loanArr = [];

foreach ($loans as $key => $value) {
    $loanmcount[(int)$key] = count($value);
}

// 重构$loanArr生成逻辑,解决关联数组转JSON为对象的问题
for($i = 1; $i <= 12; $i++){
    $monthCount = $loanmcount[$i] ?? 0;
    // 直接生成符合要求的二维索引数组,每个子元素为[月份名, 数值]
    $loanArr[] = [
        $monthNames[$i],
        // 如需转小数/百分比格式可在此处做转换,比如(float)$monthCount
        $monthCount
    ];
}

$loanTypeCount = Loan::select(['loan_type AS name', DB::raw('count(loan_type) AS y')])
                     ->groupBy('loan_type')
                     ->orderBy(DB::raw('y'), 'desc')
                     ->where('transaction_year', $transyear)
                     ->where('invalid', false)
                     ->get(); 

$loanTypeCount->map(function($loan)use($loanArr) {    
    $loan->data = $loanArr;
    return $loan;
});

可选优化:按贷款类型单独统计月度数据

如果需要不同贷款类型返回各自对应的月度统计(而非所有类型共用全量贷款月度数据),将上述map逻辑替换为以下代码即可:

$loanTypeCount->map(function($loan) use ($transyear, $monthNames) {
    // 单独查询当前贷款类型的月度发放数据
    $typeLoans = Loan::select('date_release')
        ->where('invalid', false)
        ->where('transaction_year', $transyear)
        ->where('loan_type', $loan->name)
        ->get()
        ->groupBy(fn($date) => Carbon::parse($date->date_release)->format('m'));
    
    $typeMcount = [];
    foreach ($typeLoans as $key => $value) {
        $typeMcount[(int)$key] = count($value);
    }

    $typeData = [];
    for($i = 1; $i <= 12; $i++){
        $typeData[] = [
            $monthNames[$i],
            $typeMcount[$i] ?? 0
        ];
    }

    $loan->data = $typeData;
    return $loan;
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 19:18:01