开发者

Summing column values in a 2D Matrix

I am using nested arrays to create a 2D matrix. Its pretty easy too find the sum of all the values in the rows using nested foreach loops. However, I cant figure out how to do a sum down each column. ie: I want to find the sum of the score for each item.

Any suggestions? Thank you!!! :)

PS: Note that some of the cells in the array have no values. These will be taken as 0.

Sum across row

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

The Nested Array

$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
                            );
开发者_如何学Go
$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);

Which has output like this:

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
)


Use array_keys() to determine the names of each movie scored by each critic. Add the value of that movie to a master array $scores with the same movie name as a key:

$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];
    }
}

The output:

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;
    }
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜