В 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';
}));