0

我正在开发一个需要合并行的 PHP 项目(规则是:如果前两个数字匹配,则添加其余数字)

我有这个数组:

 array_b4_combine= [
    [2,15,1,1,0],
    [2,15,3,3,0],
    [2,15,1,1,0],
    [2,21,2,2,0],
    [2,24,7,7,0],
    [2,24,2,2,0],
    [3,15,1,1,0],
    [3,15,7,7,0],
    [3,24,1,1,0]];

输出应该是:

 combined= [
    [2,15,5,5,0],
    [2,21,2,2,0],
    [2,24,9,9,0],
    [3,15,8,8,0],
    [3,24,1,1,0]];

这是我的代码:

            $num1 = $array_b4_combine[0][0];
    $num2 = $array_b4_combine[0][1];
    $sum1 = 0;
    $sum2 = 0 ;
            $sum3 = 0 ;

    $combined ;


    for ( $i = 0 ; $i < count($array_b4_combine) ; $i++)
    {   

        if ($num1 == $array_b4_combine[$i+1][0] && $num2 == $array_b4_combine[$i+1][1])
        {
            $sum1 = $sum1 + $array_b4_combine[$i][2];
            $sum2 = $sum2 + $array_b4_combine[$i][3];
                            $sum3 = $sum3 + $array_b4_combine[$i][4];
        }
        else
        {
            $combined[] = array($num1 , $num2 , $sum1, $sum2, $sum3);

            $day = $array_b4_combine[$i][0];
            $time = $array_b4_combine[$i][1];
            $sum1 = $array_b4_combine[$i][2];
            $sum2 = $array_b4_combine[$i][3];
                            $sum3 = $array_b4_combine[$i][4];

        }


    }

我的代码的输出是这样的:

    combined= 
    [[2,15,4,4,0],
     [2,15,1,1,0],
     [2,21,2,2,0],
     [2,24,7,7,0],
     [2,24,2,2,0],
     [3,15,1,1,0],
     [3,15,7,7,0]];

我是否以错误的顺序执行重置子句.. 有人可以弄清楚这里有什么问题。

谢谢

4

2 回答 2

0

我真的无法理解你的代码,试试这个:

$combined = [];
foreach ($array_b4_combine as $i => $arrayRow) {
    $k = $arrayRow[0].' '.$arrayRow[1];
    if (isset($combined[$k]))
        for ($i=2; $i<5; $i++)
            $combined[$k][$i] += $arrayRow[$i];
    else
        $combined[$k] = $arrayRow;
}
$combined = array_values($combined);
于 2013-10-23T01:57:22.630 回答
0

这是我如何解决你的问题。代码可以优化。

<?php
$array_b4_combine = [
    [2,15,1,1,0],
    [2,15,3,3,0],
    [2,15,1,1,0],
    [2,21,2,2,0],
    [2,24,7,7,0],
    [2,24,2,2,0],
    [3,15,1,1,0],
    [3,15,7,7,0],
    [3,24,1,1,0]];

     $j =0;

    for ( $i = 0 ; $i < count($array_b4_combine) -1 ; $i++)
    {   
      if($i == 0)
        {
         $sum1 = $array_b4_combine[$i][2];
         $sum2 = $array_b4_combine[$i][3];
         $sum3 = $array_b4_combine[$i][4];
        }
   if(($array_b4_combine[$i][0] == $array_b4_combine[$i+1][0]) && ($array_b4_combine[$i][1] == $array_b4_combine[$i+1][1]) )
        {
            $sum1 = $sum1 + $array_b4_combine[$i+1][2];
            $sum2 = $sum2 + $array_b4_combine[$i+1][3];
            $sum3 = $sum3 + $array_b4_combine[$i+1][4];
            $combined[$j][0] = $array_b4_combine[$i][0];
            $combined[$j][1] = $array_b4_combine[$i][1];
            $combined[$j][2] = $sum1;
            $combined[$j][3] = $sum2; 
            $combined[$j][4] = $sum3; 

        }
        else
        {   $j++;
            $combined[$j][0] = $array_b4_combine[$i+1][0];
            $combined[$j][1] = $array_b4_combine[$i+1][1];
            $combined[$j][2] = $array_b4_combine[$i+1][2];
            $combined[$j][3] = $array_b4_combine[$i+1][3];
            $combined[$j][4] = $array_b4_combine[$i+1][4];
            $sum1 =  $combined[$j][2];
            $sum2 =  $combined[$j][3];
            $sum3 =  $combined[$j][4];
        }

      }

    echo "<pre>";
    print_r($combined);
    echo "</pre>"; 
?> 
于 2013-10-24T10:29:59.057 回答