在CodeIgniter的foreach循环中计算数组当前值与前值的比值
实现CodeIgniter近30天收款数据日环比计算与展示
步骤1:控制器层预处理数据
在控制器中调用模型获取数据后,先计算每日总收款,再遍历计算当前日期与前一日的比值,把结果存入数据数组中传递给视图。
示例代码:
// 从模型获取近30天按日期分组的收款数据 $collectionData = $this->your_model->get_monthly_collection(); // 预处理数据:计算每日总收款及环比比值 $processedData = []; $previousTotal = 0; foreach ($collectionData as $index => $item) { // 计算当日四类收款总和 $currentTotal = $item['Regular'] + $item['Recovery'] + $item['Block'] + $item['Legal']; $item['total'] = $currentTotal; // 处理环比计算(第一条数据无前置日期,直接标记为N/A) if ($index === 0) { $item['ratio'] = 'N/A'; $item['trend'] = ''; } else { // 避免除以0的异常情况 if ($previousTotal == 0) { $item['ratio'] = '无前置数据'; $item['trend'] = ''; } else { // 保留两位小数计算比值 $ratio = number_format($currentTotal / $previousTotal, 2); $item['ratio'] = $ratio; // 判断增减趋势 $item['trend'] = $ratio > 1 ? '增长' : ($ratio < 1 ? '下降' : '持平'); } } $processedData[] = $item; // 更新前置日期的总收款值 $previousTotal = $currentTotal; } // 将处理后的数据传递到视图 $this->load->view('collection_table_view', ['collectionData' => $processedData]);
步骤2:视图层渲染表格
在视图中直接遍历预处理好的数组,最后一列输出环比比值与增减趋势:
示例代码:
<table border="1" cellpadding="8"> <thead> <tr> <th>日期</th> <th>Regular</th> <th>Recovery</th> <th>Block</th> <th>Legal</th> <th>当日总收款</th> <th>环比比值</th> <th>增减趋势</th> </tr> </thead> <tbody> <?php foreach ($collectionData as $item): ?> <tr> <td><?= $item['date'] ?></td> <td><?= $item['Regular'] ?></td> <td><?= $item['Recovery'] ?></td> <td><?= $item['Block'] ?></td> <td><?= $item['Legal'] ?></td> <td><?= $item['total'] ?></td> <td><?= $item['ratio'] ?></td> <td> <?php if ($item['trend']): ?> <span style="color: <?= $item['trend'] == '增长' ? 'green' : ($item['trend'] == '下降' ? 'red' : '#666') ?>"> <?= $item['trend'] ?> </span> <?php endif; ?> </td> </tr> <?php endforeach; ?> </tbody> </table>
额外说明
- 如果需要按单个收款类型计算环比(比如单独算Regular的当日值与前一日比值),只需要把控制器中的
currentTotal和previousTotal替换为对应字段即可。 - 确保模型
get_monthly_collection返回的数据是按日期升序排列的,否则环比计算逻辑会出错。 - 可根据需求调整比值的小数位数,或增减趋势的展示样式。
内容的提问来源于stack exchange,提问作者Jahangir Hossain
相关产品推荐
相关产品推荐

