CakePHP2.x中如何格式化HTML表格展示唯一ID、月份并汇总成本?
CakePHP2.x 整理数组并生成月度成本表格
原始数据
$data = array( 0 => array('id' => 8, 'month' => 1, 'cost' => 12500), 1 => array('id' => 8, 'month' => 2, 'cost' => 14200), 2 => array('id' => 9, 'month' => 1, 'cost' => 23000), 3 => array('id' => 9, 'month' => 2, 'cost' => 18000), );
第一步:在Controller中整理数组
把扁平化的数组按id分组,同时为每个id预先生成1-5月的成本占位(对应Jan到May),有数据自动填充,无数据用默认值(这里设为0,可按需改为空字符串)。
// Controller中的处理代码 public function index() { // 月份映射:数字转英文缩写 $monthMap = array( 1 => 'Jan', 2 => 'Feb', 3 => 'Mar', 4 => 'Apr', 5 => 'May' ); $groupedData = array(); foreach ($data as $item) { $id = $item['id']; $month = $item['month']; // 初始化当前id的月度成本数组,确保所有月份都有位置 if (!isset($groupedData[$id])) { $groupedData[$id] = array_fill_keys(array_keys($monthMap), 0); } // 填充对应月份的实际成本 $groupedData[$id][$month] = $item['cost']; } // 传递数据到视图 $this->set('groupedData', $groupedData); $this->set('monthMap', $monthMap); // 加载NumberHelper用于格式化数字千分位 $this->helpers[] = 'Number'; }
第二步:在View.ctp中渲染表格
利用分组后的数据循环生成表头和每行数据,用NumberHelper格式化成本为带千分位的格式。
<!-- View.ctp中的表格代码 --> <table border="1" cellpadding="8" cellspacing="0"> <thead> <tr> <th>Id</th> <?php foreach ($monthMap as $name): ?> <th><?php echo h($name); ?></th> <?php endforeach; ?> </tr> </thead> <tbody> <?php foreach ($groupedData as $id => $monthCosts): ?> <tr> <td><?php echo h($id); ?></td> <?php foreach ($monthCosts as $cost): ?> <td><?php echo $this->Number->format($cost, array('thousands' => ',')); ?></td> <?php endforeach; ?> </tr> <?php endforeach; ?> </tbody> </table>
补充说明
- 如果不需要显示0,可将
array_fill_keys的第二个参数改为'',无数据的月份就会显示空单元格 h()函数用于转义输出,避免XSS风险,CakePHP中建议常规输出都加上- 若后续需要扩展到更多月份,只需修改
$monthMap数组即可
内容的提问来源于stack exchange,提问作者K1m4
相关产品推荐
相关产品推荐

