Эффективные способы суммирования общих значений в массивах PHP по ключу

В PHP массивы — это фундаментальная структура данных, используемая для хранения коллекций значений. Иногда вам может потребоваться суммировать общие значения в массивах на основе определенного ключа. В этой статье блога будут рассмотрены различные методы решения этой задачи и приведены примеры кода для каждого метода.

Метод 1. Использование цикла foreach

$sums = [];
foreach ($array as $item) {
    $key = $item['key'];
    $value = $item['value'];
    if (isset($sums[$key])) {
        $sums[$key] += $value;
    } else {
        $sums[$key] = $value;
    }
}

Метод 2: использование array_reduce()

$sums = array_reduce($array, function ($carry, $item) {
    $key = $item['key'];
    $value = $item['value'];
    if (isset($carry[$key])) {
        $carry[$key] += $value;
    } else {
        $carry[$key] = $value;
    }
    return $carry;
}, []);

Метод 3: использование array_walk()

$sums = [];
array_walk($array, function ($item) use (&$sums) {
    $key = $item['key'];
    $value = $item['value'];
    if (isset($sums[$key])) {
        $sums[$key] += $value;
    } else {
        $sums[$key] = $value;
    }
});

Метод 4: использование array_count_values() и array_map()

$counts = array_count_values(array_column($array, 'key'));
$sums = array_map(function ($item) use ($array) {
    $key = $item['key'];
    $value = $item['value'];
    return $value * $counts[$key];
}, $array);

Метод 5: использование array_reduce() и array_filter()

$sums = array_reduce($array, function ($carry, $item) {
    $key = $item['key'];
    $value = $item['value'];
    if (isset($carry[$key])) {
        $carry[$key] += $value;
    } else {
        $carry[$key] = $value;
    }
    return $carry;
}, array_filter($array, function ($item) {
    return $item['key'] === 'common_key';
}));