php array находит дубликаты, суммирует их и удаляет дубликаты

У меня есть массив:

Array ( [0] => Array ( [setid] => 2 [income] => 100 ) [1] => Array ( [setid] => 2 [income] => 120 ) [2] => Array ( [setid] => 3 [income] => 700 ) ) 

мне нужно найти записи с одним и тем же setid, суммировать их доход и удалять повторяющиеся записи – в конце концов, это должно выглядеть так:

 Array ( [0] => Array ( [setid] => 2 [income] => 220 ) [1] => Array ( [setid] => 3 [income] => 700 ) ) 

кто-то знает, что у меня нет проблем в решении проблемы, или мне нужно пройти долгий путь и сделать каждый шаг вручную?

благодарности и приветствия

Просто создайте новый массив, который вы быстро определяете, используя ключ setid. И переиндексируйте массив в конце.

 $result = array(); foreach ($array as $val) { if (!isset($result[$val['setid']])) $result[$val['setid']] = $val; else $result[$val['setid']]['income'] += $val['income']; } $result = array_values($result); // reindex array 

Это должно работать:

 $values = array(); foreach($array as $val) { if(isset($values[$val['setid']])) { $values[$val['setid']] += $val['income']; } else { $values[$val['setid']] = $val['income']; } } //all values are now in $values array, keys are setid and values are income 

Напишите свою собственную функцию, это не долгий путь.

 $result = array_reduce($originalArray, function($memo, $item){ isset($memo[$item['setid']]) ? $memo[$item['setid']] = $item['income'] : $memo[$item['setid']] += $item['income']; return $memo; }, []); 

Вы должны использовать функцию array_unique, которую предлагает официальный сайт php.

Пример:

 <?php $input = array("a" => "green", "red", "b" => "green", "blue", "red"); $result = array_unique($input); print_r($result); ?> 

Вывод:

 Array ( [a] => green [0] => red [1] => blue ) 

Чтобы суммировать дублированные значения, вы можете использовать функцию array_count_values :

 <?php $array = array(1, "hello", 1, "world", "hello"); print_r(array_count_values($array)); ?> 

Результатом будет:

 Array ( [1] => 2 [hello] => 2 [world] => 1 )