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

在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 12:01:10