PHP:如何基于相同的键合并行?

时间:2018-05-17 09:04:36

标签: php arrays

我正在尝试合并具有相同年份列表的所有行。但无法实现它。

  1. 通过添加数据显示年度数据
  2. 数组列表。

    <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>
    

    代码:

    $defaultOrderings

    当前输出:

    current output

    我期待什么?通过年度明智地添加这些数据。

    desire output

      

    备注:所有数据均出现年度,&amp;数据列代表总数   数据总和

2 个答案:

答案 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匹配的年份,所以数组不必按排序顺序排列。

https://3v4l.org/kCBRE
效果:https://3v4l.org/OgT0a