PHP:如何基于相同的键合并行?
我正在尝试合并列表中具有相同年份的所有行。但却无法实现PHP:如何基于相同的键合并行?,php,arrays,Php,Arrays,我正在尝试合并列表中具有相同年份的所有行。但却无法实现 通过添加数据显示年度数据 数组列表。 $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' cel
$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 </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>
代码:
$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 </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>
锡
月
年
是新的吗?
资料
全部的
电流输出:
我的期望是什么?按年份添加这些数据
注:所有数据按年份显示,&数据列表示总数
数据总和
锡
月/年
资料
您可以使用两个foreach数组和一组数组函数筛选数组。我首先查找所有年份,然后在第二个循环中循环唯一的值。
然后我使用array\u sum和array\u 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_函数匹配的年份,所以数组不必按顺序排序
性能: