对二维矩阵中的列值求和


Summing column values in a 2D Matrix

我使用嵌套数组来创建一个2D矩阵。使用嵌套的foreach循环,很容易找到行中所有值的总和。然而,我不知道如何对每一列求和。例如:我想找出score对每个item的和。

有什么建议吗?谢谢你! !:)

PS:注意数组中的一些单元格没有值。这些将被视为0。

跨行求和

foreach($critics as $array) {
    foreach($array as $item => $score) {
        $row_sum += $score;
    }
}

$critics['Lisa Rose'] = array(
                        'Lady in the water' => 2.5,
                        'Snakes on a plane' => 3.5,
                        'Just my luck' => 3.0,
                        'Superman returns' => 3.5,
                        'You, me and dupree' => 2.5,
                        'The night listener' => 3.0
                        );
$critics['Gene Seymour'] = array(
                            'Lady in the water' => 3.0,
                            'Snakes on a plane' => 3.5,
                            'Just my luck' => 1.5,
                            'Superman returns' => 5.0,
                            'You, me and dupree' => 3.5,
                            'The night listener' => 3.0
                            );
$critics['Michael Phillips'] = array(
                            'Lady in the water' => 2.5,
                            'Snakes on a plane' => 3.0,
                            'Superman returns' => 3.5,
                            'The night listener' => 4
                            );
$critics['Claudia Puig'] = array(
                            'Snakes on a plane' => 3.5,
                            'Just my luck' => 3.0,
                            'Superman returns' => 4.5,
                            'You, me and dupree' => 4.0,
                            'The night listener' => 2.5
                            );
$critics['Mick LaSalle'] = array(
                            'Lady in the water' => 3.0,
                            'Snakes on a plane' => 4.0,
                            'Just my luck' => 2.0,
                            'Superman returns' => 3.0,
                            'You, me and dupree' => 3.0,
                            'The night listener' => 2.0
                            );
$critics['Jack Matthews'] = array(
                            'Lady in the water' => 3.0,
                            'Snakes on a plane' => 4.0,
                            'Just my luck' => 2.0,
                            'Superman returns' => 3.0,
                            'You, me and dupree' => 3.5,
                            );
$critics['Toby'] = array(
                            'Snakes on a plane' => 4.5,
                            'Just my luck' => 1.0,
                            'Superman returns' => 4.0
                            );
// loop through each critic
foreach($critics as $array){
    // loop through each film
    foreach(array_keys($array) as $film){
        // add the score to the film's entry in the films array (or create the entry)
        $films[$film] += $array[$film];
    }
}
print_r($films);

输出如下:

Array
(
    [Lady in the water] => 14
    [Snakes on a plane] => 26
    [Just my luck] => 12.5
    [Superman returns] => 26.5
    [You, me and dupree] => 16.5
    [The night listener] => 14.5
)

使用array_keys()确定每个评论家评分的每部电影的名称。将该电影的值添加到主数组$scores中,该数组具有与键相同的电影名称:

$scores = array();
foreach ($critics as $critic) {
    // Get the movies scored by this critic
    $movies = array_keys($critic);
    // Add each movie's score to the master list's score
    foreach ($movies as $movie) {
      // Add it to the score if the movie is already in the master list
      if (isset($scores[$movie])) { 
        $scores[$movie] += $critic[$movie];
      }
      // Otherwise initialize this movie in the master list
      else $scores[$movie] = $critic[$movie];
    }
}
输出:

print_r($scores);
Array
(
    [Lady in the water] => 14
    [Snakes on a plane] => 26
    [Just my luck] => 12.5
    [Superman returns] => 26.5
    [You, me and dupree] => 16.5
    [The night listener] => 14.5
)
$scores = array();
foreach ($critics as $items) {
    foreach ($items as $item => $score) {
        if (isset($scores[$item]))
            $scores[$item] += $score;
        else
            $scores[$item] = $score;
    }
}