У меня есть массив:
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 )