@lawer85

Как в 2 мерном массиве оставить только уникальные записи, а у одинаковых записей сложить значения?

Есть массив

Array
(
    [0] => Array
        (
            [first_name] => Петр
            [last_name] => Рахимов
            [duration_sum] => 49177
        )

    [1] => Array
        (
            [first_name] => Степан
            [last_name] => Кадимов
            [duration_sum] => 38674
        )

    [2] => Array
        (
            [first_name] => Антон
            [last_name] => Кадимов
            [duration_sum] => 41302
        )

    [3] => Array
        (
            [first_name] => Антон
            [last_name] => Кадимов
            [duration_sum] => 42102
        )

    [4] => Array
        (
            [first_name] => Павел
            [last_name] => Евстигнеев
            [duration_sum] => 44956
        )

    [5] => Array
        (
            [first_name] => Богдан
            [last_name] => Фасонов
            [duration_sum] => 44612
        )
)


Мне нужно получить новый массив, где нет повторяющихся людей, а также вычислить сумму всех значений одинаковых записей, допустим тут 2 записи Антон Кадимов, вот и нужно сделать только одну запись, но с суммой всех [duration_sum]
  • Вопрос задан
  • 135 просмотров
Решения вопроса 1
ZLOFENIX
@ZLOFENIX
Абсолютно поехавший
$t = array();
foreach(твой_массив as $&v)
$t[$v['first_name'].";".$v['last_name']] += $v['duration_sum'];

В итоге у тебя будет массив с ключом вида Богдан;Фасонов и значением суммой, дальше уже показываешь или пересобираешь как хочешь.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@zinovievyury
И в чем суть проблемы?
Пишите функцию, скажем, isUnique($person) которая будет чекать массив на уникальность по сравнению с исходным. Тупо перебираем и сравниваем - что сложного? В качестве возвращаемого значения - сумма всех найденных duration_sum у совпадающих с аргументом массивов.

Т.е. если нашел совпадение (а оно будет хотя бы одно исходя из условий задачи), то плюсует duration_sum
И все. Получите на выходе число. Пишем массив в новый массив (тот который будет без дубликатов) персонажа с новым значением duration_summ

Перед началом сравнения проверяем, что в новом массиве (который без дуликатов должен быть) такого персонажа (который в аргументе функции) уже нет. Если уже есть, значит мы по нему уже искали дубликатов и внесли уже его в новый массив.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы