$hash = array();
foreach ($sourceArray as $key=>$value) {
$y = 0;
if (isset($hash{$value{'name'}})) {
$y = $hash{$value{'name'}};
}
$hash{$value{'name'}} = $y + $value{'y'};
}
$result = array();
foreach ($hash as $key => $value) {
$result[] = array( 'name' => $key, 'value' => $value );
}
print_r($result);
Последний цикл просто для получения $hash
в указанном вами формате.
Объяснение:
$hash
Временная структура, используемая для вычислениясуммы для каждого уникального имени.
foreach ($sourceArray as $key=>$value) {
Он проходит через ваш исходный массив ($ sourceArray) и извлекает каждый элемент.
$y = 0;
Инициализирует переменную для хранения текущей суммы, котораяпринадлежит с этим именем.
if (isset($hash{$value{'name'}})) {
Проверяет, было ли уже сохранено значение в $hash
для данного имени.
$y = $hash{$value{'name'}};
}
Устанавливает $ y в ранее вычисленную суммудля данного имени, если оно было.
$hash{$value{'name'}} = $y + $value{'y'};
}
Сохраняет сумму для данного имени в нашей временной структуре $hash
.
$result = array();
foreach ($hash as $key => $value) {
$result[] = array( 'name' => $key, 'value' => $value );
}
преобразует $ hash в формат, который вытребуемый.
empy [] в $result[] = ...
добавляет правую часть выражения к концу массива $result
.