Как суммировать многомерные массивы в PHP без слияния значений - PullRequest
1 голос
/ 21 января 2011

Допустим, у меня есть следующий массив, и я хочу сложить значения подмассива с помощью 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')
);

Кажется, я могу добавить его до 16 с помощью цикла foreach, но мне нужны отдельные значения, чтобы я мог получить самое высокое и самое низкое значение.

Заранее спасибо!

Ответы [ 5 ]

3 голосов
/ 21 января 2011

Итак, у вас есть массив массивов, и вы хотите вернуть массив сумм каждого подмассива?

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

Все, что вам нужно будет сделать, это вызвать max для возвращенного массива

2 голосов
/ 21 января 2011
$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 голосов
/ 01 мая 2013

Простая функция, такая как:

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');
0 голосов
/ 21 января 2011

Вы можете перебрать существующий массив, найти сумму оценок по всем вопросам для данного человека и заменить существующее значение (массив) на вновь созданный массив:

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

Посмотреть

0 голосов
/ 21 января 2011

Это должно быть сделано.

$summary = array();

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

Инициализировать значение суммы, суммировать каждый набор вопросов, спрятать значение суммы и повторить до конца.Вы можете поместить array_sum () в микс вместо внутреннего цикла foreach.Я всегда забываю о функциях массива PHP.Это было бы так:

$summary = array();

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

Гораздо короче и, вероятно, более эффективно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...