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