Суммирование элементов из массива поправок по ключу - PullRequest
0 голосов
/ 28 декабря 2018

Я хочу суммировать все элементы из моего массива на основе столбца

Я пытаюсь получить эту сумму, но не ожидаемые результаты.

Мой массив:

Array
(
[0] => Array
    (
        [Periode] => 2008/2009
        [Producteurs] => 2
        [Sucreries] => 0
        [Papeteries] => 0
    )

[1] => Array
    (
        [Periode] => 2008/2009
        [Producteurs] => 0
        [Sucreries] => 0
        [Papeteries] => 5
    )

[2] => Array
    (
        [Periode] => 2008/2009
        [Producteurs] => 0
        [Sucreries] => 14
        [Papeteries] => 0
    )

[3] => Array
    (
        [Periode] => 2009/2010
        [Producteurs] => 2
        [Sucreries] => 0
        [Papeteries] => 0
    )

[4] => Array
    (
        [Periode] => 2009/2010
        [Producteurs] => 0
        [Sucreries] => 0
        [Papeteries] => 4
    )

[5] => Array
    (
        [Periode] => 2009/2010
        [Producteurs] => 0
        [Sucreries] => 13
        [Papeteries] => 0
    )
)

Я пытаюсь так:

 foreach ($result as $value){
    $result[$value]['Periode'] = $result[$value]['Producteurs'] + $result[$value]['Sucreries'] + $result[$value]['Papeteries'];
 }

Но не работа, которую я ожидал.

Ожидаемый результат:

Array
(
   [0] => Array
    (
        [Periode] => 2008/2009
        [Producteurs] => 2
        [Sucreries] => 14
        [Papeteries] => 5
    ),
   [1] => Array
    (
        [Periode] => 2009/2010
        [Producteurs] => 2
        [Sucreries] => 13
        [Papeteries] => 4
    )

Идея на самом деле заключается в суммировании всех элементов группыby periode и возвращает только один массив за период, который будет содержать сумму каждого элемента для этого периода.

1 Ответ

0 голосов
/ 28 декабря 2018

Вы пытаетесь сложить все итоги в одно значение и поместить их в массив, который я даже не уверен, как он будет структурирован.Вы должны создать набор записей, индексированных «Периодом», а затем добавить значения в них при обнаружении новых элементов ...

$totals = array();
foreach ( $result as $value )   {
    if ( !isset($totals[$value['Periode']]))    {
        $totals[$value['Periode']] = $value;
    }
    else    {
        $totals[$value['Periode']]['Producteurs'] +=$value['Producteurs'];
        $totals[$value['Periode']]['Sucreries'] +=$value['Sucreries'];
        $totals[$value['Periode']]['Papeteries'] +=$value['Papeteries'];
    }
}

print_r(array_values($totals));

Конечный результат, который я использую array_values() для удаленияключи.

...