Суммирование значений столбцов в 2D-матрице - PullRequest
0 голосов
/ 11 сентября 2011

Я использую вложенные массивы для создания 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
                            );

Ответы [ 3 ]

0 голосов
/ 11 сентября 2011
// 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 голосов
/ 11 сентября 2011
$scores = array();
foreach ($critics as $items) {
    foreach ($items as $item => $score) {
        if (isset($scores[$item]))
            $scores[$item] += $score;
        else
            $scores[$item] = $score;
    }
}
0 голосов
/ 11 сентября 2011

Используйте 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
)
...