PHP多维数组问题求解?

--------------------------
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
----------------------------
请问源数据要怎么组数组,组成数组后,后面二位数累加的程序如何写的。

作者: zhouyazun   发布时间: 2011-05-30

PHP code
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);

作者: T5500   发布时间: 2011-05-30

换个思路,少些循环……



PHP code

$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);


作者: snmr_com   发布时间: 2011-05-30