@nur2050

Как суммировать значения дубликатов массива?

Здравствуйте, ломаю голову, помогите пожалуйста.
Есть массив:
array(
(int) 0 => array(
'player_id' => '1',
'count_goals' => (int) 1
),
(int) 1 => array(
'player_id' => '2',
'count_goals' => (int) 1
),
(int) 2 => array(
'player_id' => '1',
'count_goals' => (int) 1
)
)
В результате должно получится:
array(
(int) 0 => array(
'player_id' => '1',
'count_goals' => (int) 2
),
(int) 1 => array(
'player_id' => '2',
'count_goals' => (int) 1
)
)
т.е. если в массиве встречается player_id не с уникальным номером, то увеличиваем его count_goals на 1.
  • Вопрос задан
  • 114 просмотров
Решения вопроса 1
mhthnz
@mhthnz
PHP, YII2, Golang, Linux
<?php
$array = [
[
  'player_id' => 1,
  'count_goals' => 1
],
[
  'player_id' => 1,
  'count_goals' => 1
],
[
  'player_id' => 1,
  'count_goals' => 1
],
[
  'player_id' => 1,
  'count_goals' => 1
],
];

function filter($array)
{
	$result = [];
  	foreach($array as $key => $value) {
		if (array_key_exists($value['player_id'], $result)) {
			$result[$value['player_id']]['count_goals'] += $value['count_goals'];
		} else {
			$result[$value['player_id']] = $value;	
		}
  	}
  return array_values($result);
}

print_r(filter($array));
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@nur2050 Автор вопроса
Андрей
в ходе работы заметил что когда в массиве больше значений чем 2 т.е.:
$array = [
[
  'player_id' => 1,
  'count_goals' => 1
],
[
  'player_id' => 1,
  'count_goals' => 1
],
[
  'player_id' => 1,
  'count_goals' => 1
],
[
  'player_id' => 1,
  'count_goals' => 1
],
];

результат выходит другой:
array(
	(int) 0 => array(
		'player_id' => '1',
		'count_goals' => (int) 3
	),
	(int) 1 => array(
		'player_id' => '1',
		'count_goals' => (int) 1
	)
)

в чем может быть ошибка, спасибо
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы