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
相关产品推荐
相关产品推荐

