我已经被这个“小”问题困了好几天了。我有一个包含特定数据的数组:
$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),
);
这是我需要得到的html表结果:
Id Jan Feb Mar Apr May
8 12,500 14,200 10,200 10,300 11,000
9 23,000 18,000 21,320 10,642 14,636
我如何排序数组以在view.ctp的html表中显示这些数据?我已经尝试过使用foreach循环,但我真的不知道如何像上面显示的那样放置唯一月份和唯一ID。我使用的是CakePHP 2.x技术。
我很感激你的帮助谢谢
3条答案
按热度按时间u7up0aaq1#
循环数组并根据ID分组到新数组中。使用ID作为多维数组的分组键,分配
month=cost
键-值对。这会将示例数据转换为以下数组:
这应该更容易转换成HTML表格。例如:
我相信代码足够清晰,没有复杂的注解。根据需要在表头中添加月份。例如,使用
number_format
for$cost
来格式化您的货币。* 请注意,上面的示例代码没有考虑给定ID可能缺少的月份 *,它假设数据对称。如果需要,添加检查和补救措施。请参见https://3v4l.org/7CFRf上的演示。mctunoxg2#
您应该使用2D数组来显示这种表格。
那么$data数组可能是这样的:
要像这样还原$data数组,需要下面的代码。
使用new data Array,你可以让你的html页面像这样。
7xllpg7q3#
您可以使用array_column()和array_sum()函数的组合:
$数据=数组(
数组(“id”=〉8,“月份”=〉1,“成本”=〉12500),
数组(“id”=〉8,“月份”=〉2,“成本”=〉14200),
数组(“id”=〉9,“月份”=〉1,“成本”=〉23000),
数组(“id”=〉9,“月份”=〉2,“成本”=〉18000),
);
数组()中的每个元素。
foreach($数据作为$行){
$结果[$行['标识']][$行['月份']] = $行['成本'];
}
//将每个月的成本加总
$months =数组列($data,'月份');
$result =数组Map(函数($v)使用($months){
返回数组和(数组交叉键($v,数组翻转($months)));
}、$结果);
打印_r($结果);
这将输出:
数组
(
[8]=〉数组
(
[1]=〉12500
[2]=〉14200
)
[9]=〉数组
(
[1]=〉23000
[2]=〉18000
)
)