我有以下查询
$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/