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'>&nbsp;&nbsp;</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'>&nbsp;&nbsp;</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_函数匹配的年份,所以数组不必按顺序排序


    性能: