2011-09-10 113 views
0

我正在使用嵌套數組創建2D矩陣。它很容易找到使用嵌套的foreach循環的行中所有值的總和。但是,我無法弄清楚如何對每列進行總結。即:我想爲每個item找到score的總和。在2D矩陣中求和列值

有什麼建議嗎?謝謝!!! :)

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 
          ); 

回答

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 
) 
0

使用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 
) 
0
$scores = array(); 
foreach ($critics as $items) { 
    foreach ($items as $item => $score) { 
     if (isset($scores[$item])) 
      $scores[$item] += $score; 
     else 
      $scores[$item] = $score; 
    } 
}