php - 如何重组数组

标签 php mysql pdo

我有以下查询

$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);

它返回的正是我所需要的。但是,我随后需要使用按电子邮件分组的相同信息。 有没有办法做到这一点,而无需重新查询数据库?

最佳答案

$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;
}

这将创建一个以电子邮件为键的数组。

如果您想像 SQL 中“GROUP BY”的工作方式那样执行此操作,请使用:

$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;
}

关于php - 如何重组数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41872349/

相关文章:

mysql - Yii2如何使用DbManager分配角色?

mysql - 如何修复 Zsh 中的 "command not found: mysql"

php - 同时使用 PDO 和 mysqli - 有碰撞风险吗?

php - PDO::FETCH_CLASS 不将类名作为参数传递

php - 数据在表中后,Laravel Migration 添加字段?

php - 从供应商类生成 Symfony2 表单

需要Javascript时区解决方案(考虑到UTC时间戳的实际差异)

PHP - 使用带有日期字段的 PDO 不起作用

php - mysql_result() 期望参数 1 为资源,给定的字符串

php - 升级到 5.4 但 "php -v"仍然返回旧版本