Объедините два массива, но добавьте значения дубликатов ключей вместе

У меня есть два массива: $ ids и $ quants (идентификаторы и количества товаров), которые необходимо объединить, но вместо замены или удаления дубликатов их значения следует складывать вместе.

В настоящее время я использую array_combine (), но это означает, что некоторые количества теряются при наличии нескольких идентичных идентификаторов.

например

$ids = Array(1, 1, 2, 3);
$quants = Array(10, 20, 30, 40);

Желаемый результат:

$combined = Array(
[1] => 30
[2] => 30
[3] => 40
)

Спасибо заранее за любые советы

2

Решение

$ids = Array(1, 1, 2, 3);
$quants = Array(10, 20, 30, 40);

$a = array_unique($ids);
$a = array_combine($a, array_fill(0, count($a), 0));

foreach($ids as $k=>$v) {
$a[$v] += $quants[$k];
}

print_r($a);
4

Другие решения

Нет встроенной функции, поэтому вы должны сделать это самостоятельно:

function my_array_combine($keys, $values)
{
if (count($keys) != count($values)) {
throw new InvalidArgumentException('More or less');
}

$result = array();

$values = array_values($values); // make sure it is indexed 0, 1, 2
foreach(array_values($keys) as $idx => $key) {
// Correspondending value is at $values[$idx];
if (isset($result[$key])) {
$result[$key] += $values[$idx];
} else {
$result[$key] = $values[$idx];
}
}

return $result;
}
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector