- Сгруппируйте данные, назначив временные ассоциативные ключи (значения почты) новому массиву результатов.
- Во время итерации определите, обрабатываете ли вы первое вхождение значения почты или нет, позвонив
isset()
в почтовом ключе результирующего массива. - Если это первый экземпляр письма, установите все значения в подмассиве.
- Если это не первый экземпляр значение mail, отрегулируйте уже существующий подмассив.
- После цикла используйте
printf()
для краткого форматирования ваших данных по желанию.
Если синтаксис вывода с плавающей запятой неизвестен, прочитайте это .
Код: ( Демо )
$array = [
['mail' => 'mail1@example.com', 'coins' => '25000.00'],
['mail' => 'mail2@example.com', 'coins' => '500000.00'],
['mail' => 'mail1@example.com', 'coins' => '10000.00'],
['mail' => 'mail2@example.com', 'coins' => '10000.00'],
['mail' => 'mail3@example.com', 'coins' => '20000.00'],
];
$result = [];
foreach ($array as ['mail' => $mail, 'coins' => $coins]) {
if (!isset($result[$mail])) {
$result[$mail] = [1, $coins]; // declare the data for the first instance of mail
} else {
++$result[$mail][0]; // increment the running count
$result[$mail][1] += $coins; // add coins to running total
}
}
foreach ($result as $mail => $row) {
printf("%s (%d), %.2f coins\n", $mail, ...$row); // unpack the row with the splat operator (...)
}
Вывод:
mail1@example.com (2), 35000.00 coins
mail2@example.com (2), 510000.00 coins
mail3@example.com (1), 20000.00 coins