You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何按邮箱后缀排序并将同后缀邮箱合并到同一行

按邮箱后缀排序并合并同后缀邮箱的实现方案

你当前用字符串反转完成后缀排序的思路没问题,只需要补充同后缀邮箱的分组拼接逻辑即可,这里提供两种实现方式:

  • 方式一:直接分组后排序,逻辑更直观易维护
// 原始邮箱行数组,先做trim和空行过滤避免无效数据
$emailLines = array_filter(array_map('trim', $emailLines));
$groupedEmails = [];

foreach ($emailLines as $email) {
    // 提取@后的域名后缀作为分组键
    $suffix = substr(strrchr($email, '@'), 1);
    $groupedEmails[$suffix][] = $email;
}

// 按后缀名升序排序
ksort($groupedEmails);

// 同组邮箱用|拼接后逐行输出
foreach ($groupedEmails as $sameSuffixList) {
    echo implode('|', $sameSuffixList) . PHP_EOL;
}
  • 方式二:沿用你已写的反转排序逻辑,补充后续分组步骤
$revArr = [];
$i = 0;
foreach($emailLines as $eachLine){
    $eachLine = trim($eachLine);
    if ($eachLine === '') continue; // 跳过空行
    $revArr[$i++] = strrev($eachLine);
}
sort($revArr);
// 把排序后的反转字符串恢复为正常邮箱格式
$sortedEmailList = array_map('strrev', $revArr);

$groupedEmails = [];
foreach ($sortedEmailList as $email) {
    $suffix = substr(strrchr($email, '@'), 1);
    $groupedEmails[$suffix][] = $email;
}

// 因为已经提前按后缀排好序,直接拼接输出即可
foreach ($groupedEmails as $sameSuffixList) {
    echo implode('|', $sameSuffixList) . PHP_EOL;
}

两种代码运行后输出结果完全符合预期:

cde@hotmail.com|123@hotmail.com
abc@gmail.com|def@gmail.com|zxc@gmail.com
qwe@yahoo.com

内容的提问来源于stack exchange,提问作者David Mcintyre

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 11:00:59