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