--------------------------
A a1 2 5
A b1 1 3
B c1 4 10
B c1 3 8
A a1 0 7
---------------------------
得到结果一:
A a1 2 12
A b1 1 3
B c1 7 18
---------------------------
得到结果二:
A 3 15
B 7 18
----------------------------
请问源数据要怎么组数组,组成数组后,后面二位数累加的程序如何写的。

解决方案 »

  1.   

    echo "<pre>";
    $ar = array();
    $ar['A']['a1'][] = array(2,5);
    $ar['A']['b1'][] = array(1,3);
    $ar['B']['c1'][] = array(4,10);
    $ar['B']['c1'][] = array(3,8);
    $ar['A']['a1'][] = array(0,7);
    //print_r($ar);$arRS1 = $arRS2 = array();
    foreach($ar as $k1=>$v1) {
       foreach($v1 as $k2=> $v2) {
          foreach($v2 as $k3 => $v3) {
             $arRS1[$k1][$k2][0][0] += $v3[0];
             $arRS1[$k1][$k2][0][1] += $v3[1];
             $arRS2[$k1][0] += $v3[0];
             $arRS2[$k1][1] += $v3[1];
          }
       }
    }
    //print_r($arRS1);
    //print_r($arRS2);
      

  2.   

    换个思路,少些循环……
    $arr=array();
    $arr[] = array('A','A','B','B','A');//按列组成数组
    $arr[] = array('a1','b1','c1','c1','a1');
    $arr[] = array(2,1,4,3,0);
    $arr[] = array(5,3,10,8,7);$ar0 = array_unique($arr[0]);//第一列不同的值A,B
    $ar1 = array_unique($arr[1]);//第二列不同的值a1,b1,c1$arrFin=array();
    $arrFinal=array();
    foreach ($ar0 as $v0)//循环两次A,B
    {
    $arTemp0 = array_intersect($arr[0],array($v0));//筛出只有A的单元(主要目的是key),第二次循环求B
    $sum2 = array_sum(array_intersect_key($arr[2],$arTemp0));//按key取第三列的和
    $sum3 = array_sum(array_intersect_key($arr[3],$arTemp0));//按key取第四列的和,内循环也是这个思路
    $arrFinal[] = array($v0,$sum2,$sum3);
    foreach ($ar1 as $v1)//循环三次a1,b1,c1
    {
    $arTemp1 = array_intersect($arr[1],array($v1));
    $inter = array_intersect_key($arr[2],$arTemp0,$arTemp1);
    if (empty($inter)) continue;//跳过无交集情况
    $sum2 = array_sum($inter);
    $sum3 = array_sum(array_intersect_key($arr[3],$arTemp0,$arTemp1));
    $arrFin[] = array($v0,$v1,$sum2,$sum3);
    }}var_dump($arrFin,$arrFinal);
      

  3.   

    $array = array(
    array('A','a1','2','5'),
    array('A','b1','1','3'),
    array('B','c1','4','10'),
    array('B','c1','3','8'),
    array('A','a1','0','7'),
    );
    foreach($array as $kv)
    {
            parse_str('group1['.$kv[0].']['.$kv[1].'][0]+='.($group1[$kv[0]][$kv[1]][0] + $kv[2]));
            parse_str('group1['.$kv[0].']['.$kv[1].'][1]+='.($group1[$kv[0]][$kv[1]][1] + $kv[3]));
    }
    echo "<pre/>";
    echo "结果1:<br/>";
    print_r($group1);类似轻松得到结果2.
      

  4.   

    看了楼上的代码才知道还有parse_str()这么个函数,学习了。
      

  5.   

    $arr = array(
    array('A','a1','2','5'),
    array('A','b1','1','3'),
    array('B','c1','4','10'),
    array('B','c1','3','8'),
    array('A','a1','0','7'),
    );//answer 01
    $new = array();
    foreach($arr as $val) {
        $new['z'.$val[0].$val[1]] = $val[0];
        $new['s'.$val[0].$val[1]] = $val[1];
        $new['t'.$val[0].$val[1]] += $val[2];
        $new['f'.$val[0].$val[1]] += $val[3];}
    $answer1 = array_chunk($new, 4);
    //answer 02
    $new = array();
    foreach($arr as $val) {
        $new['z'.$val[0]] = $val[0];
        $new['s'.$val[0]] += $val[2];
        $new['t'.$val[0]] += $val[3];}
    $answer2 = array_chunk($new, 3);echo '<pre/><br/>';
    print_r($answer1);
    print_r($answer2);
    // output
    Array
    (
        [0] => Array
            (
                [0] => A
                [1] => a1
                [2] => 2
                [3] => 12
            )    [1] => Array
            (
                [0] => A
                [1] => b1
                [2] => 1
                [3] => 3
            )    [2] => Array
            (
                [0] => B
                [1] => c1
                [2] => 7
                [3] => 18
            ))
    Array
    (
        [0] => Array
            (
                [0] => A
                [1] => 3
                [2] => 15
            )    [1] => Array
            (
                [0] => B
                [1] => 7
                [2] => 18
            ))
      

  6.   

    我只想说一句,你们很强。学习了,为此我要给你们加分。在此谢谢了。同时我还想问下=>这个符号在PHP的详细用法是怎样的?
      

  7.   

    http://cn.php.net/manual/zh/function.array.php