revealed_at === null) { return null; } $values = []; foreach ($room->players as $player) { $vote = $player->votes->first(); if ($vote !== null && is_numeric($vote->value)) { $values[] = (float) $vote->value; } } sort($values, SORT_NUMERIC); $count = count($values); if ($count === 0) { return ['average' => null, 'median' => null]; } $middle = intdiv($count, 2); $median = $count % 2 === 1 ? $values[$middle] : ($values[$middle - 1] + $values[$middle]) / 2; return [ 'average' => number_format(array_sum($values) / $count, 2, ',', ''), 'median' => number_format($median, 2, ',', ''), ]; } }