我如何重组数组

I have the following query

$sql = 'SELECT  F.ID, F.name as famName,F.contactEmail,F.address,F.phone,F.sitting,
                M.date,M.time,M.meeting,
                P.name as partName,P.email,
                R.numAttendees,R.deltoken
        FROM    Registration R, meeting M,
                Participants P,Family F
        WHERE date = CURDATE() + INTERVAL 1 DAY
            AND R.participant = P.ID
            AND R.meeting= M.ID
            AND M.family = F.ID
        ORDER BY M.meeting';
$data = $pdo -> query($sql)->fetchAll(PDO::FETCH_GROUP);

which returns exactly what I need. However, I then need to use the same information grouped by email. Is there any way to do that, without requerying the database?

$grouped_by_email = array();
foreach($data as $row) {
    if(!isset($grouped_by_email[$row['email']])) {
         $grouped_by_email[$row['email']] = array();
    }
    $grouped_by_email[$row['email']][] = $row;
}

This will create an array of arrays with the email as the key.

If you want to do this similar to the way "GROUP BY" works in SQL, then use this:

$grouped_by_email = array();
foreach ($data as $row) {
    if (!isset($grouped_by_email[$row['email']])) {
        $grouped_by_email[$row['email']] = $row;
    }
    else {
        $grouped_by_email[$row['email']] = aggregate($grouped_by_email[$row['email']], $row);
    }
}

function aggregate($existingValue, $newValue)
{
    // Here write the olumn you want to combine and how.
    $newValue['numAttendees'] += $existingValue['numAttendees'];
    return $newValue;
}