2011-01-21 87 views
0

比方说,我有以下的阵列和我想要添加了使用子阵列值PHP:如何总结在PHP多维数组不合并值

$summary = array(
    "person1" => array(
     question1 => '3', 
     question2 => '5'), 
    "person2" => array(
     question1 => '2', 
     question2 => '3'), 
    "person3" => array(
     question1 => '1', 
     question2 => '2') 
); 

我怎么能输出个别阵列为每个人计算总和,而不是总计所有子阵列中的所有值?例如:

$summary = array(
    "person1" => array(
     questions => '8'), 
    "person2" => array(
     questions => '5'), 
    "person3" => array(
     questions => '3') 
); 

我似乎能够给它使用foreach循环添加到16,但我需要的是个人价值观,所以我可以得到的最高值和最低值。

在此先感谢!

+0

`question2 =>'5'`后面是否缺少```? – codaddict 2011-01-21 16:56:35

+0

是的......我输入了这个信息,并且猜想我忘了添加结束字母。谢谢你的提示! – TymArtist 2011-01-21 18:01:46

回答

2
$summaryTotals = Array(); 
foreach ($summary as $_summary => $_questions) 
    $summaryTotals[$_summary] = Array('questions'=>array_sum($_questions)); 
var_dump($summaryTotals); 

循环遍历所有人,得到问题的总和,并将它们放在同一个键中。


输出:

array(3) { 
    ["person1"]=> 
    array(1) { 
    ["questions"]=> 
    int(8) 
    } 
    ["person2"]=> 
    array(1) { 
    ["questions"]=> 
    int(5) 
    } 
    ["person3"]=> 
    array(1) { 
    ["questions"]=> 
    int(3) 
    } 
} 
0

这应该做到这一点。

$summary = array(); 

foreach($data as $name => $questions) 
{ 
    $sum = 0; 
    foreach($questions as $question => $answer) 
    { 
     $sum += $answer; 
    } 
    summary[$name]['questions'] = $sum; 
} 

初始化总和值,总结每组问题,存储总和值,并重复,直到完成。你可以把array_sum()放到mix中,而不是内部的foreach循环中。我总是忘记PHP的数组函数。这将是:

$summary = array(); 

foreach($data as $name => $questions) 
{ 
    summary[$name]['questions'] = array_sum($questions); 
} 

更短,可能更有效。

0

可以遍历现有的阵列上,发现标记的总和为特定人的所有问题,并与新创建的数组替换现有的值(数组):

foreach($summary as $person => $person_arr) { 
     $summary[$person] = array('question' => array_sum($person_arr)); 
} 

See it

2

所以你有一个数组的数组,并希望返回每个子数组的总和数组?

function sumArrays($array){ 
    return array_map("array_sum",$array); 
} 

所有你需要做的,就是调用max返回数组上

0

简单的功能,如:

function sumtwoDimensionalArrWithKey($twoDimensionalArr,$key_value){ 

    foreach($twoDimensionalArr as $twoDimensionalArrValue){ 
     foreach($twoDimensionalArrValue as $key=> $value){ 
      if ($key == $key_value) { 
       $total += $value; 
      } 
     }  
    } 

    return $total; 
} 

它可以这样调用:

echo sumtwoDimensionalArrWithKey($twoDimensionalArr,'field_name');