我正在尝试合并具有相同年份列表的所有行。但无法实现它。
数组列表。
<table border='1' cellpadding='5' cellspancing='3'>
<tr>
<td>SN</td>
<td>Month </td>
<td>Year </td>
<td>is new? </td>
<td>Data</td>
<td>Total</td>
</tr>
<?php
$prev_year= 0;
$i=1;
$total_val =0;
foreach($array_list as $key=>$val):
$row_span=0;
$MonthYear_label = explode(" ",$key);
$year_label = $MonthYear_label[1];
$month_label = $MonthYear_label[0];
$curr_year = $year_label;
if($curr_year==$prev_year){
$str= "same";
$total_val = $total_val + $val;
}
else {
if($i==1){
//skip for first time.. first iterator
}
else {
echo "<tr>
<td colspan='6'> </td>
</tr>";
}
$str="--new--";
$total_val=$val;
}
echo ' <tr>
<td>'.$i.'</td>
<td>'.$month_label.'</td>
<td>'.$year_label.' </td>
<td>'.$str.'</td>
<td>'.$val.'</td>
<td><b>'.$total_val.'</b></td>
</tr>';
$i++;
$prev_year= $curr_year;
endforeach;
?>
</table>
代码:
$defaultOrderings
当前输出:
我期待什么?通过年度明智地添加这些数据。
备注:所有数据均出现年度,&amp;数据列代表总数 数据总和
答案 0 :(得分:0)
<?php
$array_list= array("Jan 2016"=>2, "Feb 2016"=>4, "Mar 2016"=>2,"Apr 2016"=>0, "Jan 2017"=>9,"Feb 2017"=>2,"Mar 2017"=>5,"Jan 2018"=>4,"Feb 2018"=>6);
?>
<table border='1' cellpadding='5' cellspancing='3'>
<tr>
<td>SN</td>
<td>Month/Year</td>
<td>Data</td>
</tr>
<?php
$array = array();
foreach($array_list as $key => $value):
$MonthYear_label = explode(" ",$key);
$year_label = $MonthYear_label[1];
$month_label = $MonthYear_label[0];
$curr_year = $year_label;
$array[$curr_year]['count'] = $array[$curr_year]['count'] + $value;
endforeach;
$i = 1;
foreach ($array as $key => $value) {
echo '<tr>
<td>'.$i.'</td>
<td>'.$key.'</td>
<td>'.$value['count'].' </td>
</td>';
}
?>
</table>
答案 1 :(得分:0)
您可以使用两个foreach数组和一堆array_funtions过滤数组 我首先找到所有年份并在第二个循环中循环唯一值 然后我使用array_sum和array_intersect来查找$ year并将值相加 输出数组$ res应该很容易在表中输出。
$array_list= array("Jan 2016"=>2, "Feb 2016"=>4, "Mar 2016"=>2,"Apr 2016"=>0, "Jan 2017"=>9,"Feb 2017"=>2,"Mar 2017"=>5,"Jan 2018"=>4,"Feb 2018"=>6);
foreach(array_keys($array_list) as $key){
$years[] = explode(" ", $key)[1];
}
foreach(array_unique($years) as $year){
$res[$year] = array_sum(array_intersect_key(array_values($array_list), array_intersect($years, [$year])));
}
var_dump($res);
因为我找到了与array_functions匹配的年份,所以数组不必按排序顺序排列。