PHP:按域对电子邮件进行排序

PHP:按域对电子邮件进行排序,php,arrays,function,sorting,explode,Php,Arrays,Function,Sorting,Explode,此函数可以完美地按字母顺序对列表进行排序,并清除所有重复项 function cleanMyList($myFile) { $myTextFile=file_get_contents($myFile); $myArray=explode("\r\n",$myTextFile); $myArray=array_unique($myArray); sort($myArray); $myTextFile=implode("\r\n",$myArray);

此函数可以完美地按字母顺序对列表进行排序,并清除所有重复项

function cleanMyList($myFile)
{
    $myTextFile=file_get_contents($myFile);
    $myArray=explode("\r\n",$myTextFile);
    $myArray=array_unique($myArray);
    sort($myArray);
    $myTextFile=implode("\r\n",$myArray);
    return $myTextFile;
}   
echo '<pre>'.cleanMyList('emails.txt').'</pre>';
exit;
email.txt之后:

another-duplicate@email.com
hezi-gangina@gmail.com
tshiko-ve-diko@mail.ru
einlehasikuy@mertrix.com
ein-leha-sikuy@yahoo.com
metrixheshbon@yahoo.com
stus-ve-thsiko@yandex.ua
z-mkd@z-mkd.com
但我希望更进一步,得到这个(按域排序):

$em=”mynam@domain.com,second@second.com, third@third.com,fourth@fourth.com"; 将电子邮件分成两部分

 <?php
   asort($ar2);
?> 
$ar=split(“,”,$em);
while(列表($key,$val)=每个($ar)){
$ar2=拆分(“@”,$val);
echo$ar2[0];
回声“
”; echo$ar2[1]; 回声“

”; }
根据值-asort()对数组进行排序(升序)


  • asort()-根据值按升序对关联数组排序
  • ksort()-根据键按升序对关联数组排序
  • arsort()-根据值按降序对关联数组排序
  • krsort()-根据键按降序排列关联数组

这应该适合您:

我只是稍微修改了一下你的代码。首先,我用数组中的元素获取文件,在数组中,我只获取唯一值。在此之后,我对数组进行排序,检查域是否相同,如果相同,则按字母表进行排序

another-duplicate@email.com
hezi-gangina@gmail.com
tshiko-ve-diko@mail.ru
einlehasikuy@mertrix.com
ein-leha-sikuy@yahoo.com
metrixheshbon@yahoo.com
stus-ve-thsiko@yandex.ua
z-mkd@z-mkd.com

你试过什么吗?两种方式排序?没错!首先按字母顺序排序,然后按电子邮件提供商(域)排序。这就是我的意思。您是否尝试自行解决此问题?您可以使用explode功能,如果您喜欢我的答案,请不要忘记将其标记为“有帮助”。)@Hezi Gangina这很清楚,因为你没有这个特权,但我想知道为什么它被否决了,所以我可以改进它谢谢你!工作完美!(我不知道谁投了反对票)你的回答被接受了!你让我开心!:)谢谢兄弟!
$ar=split(",",$em);
while (list ($key, $val) = each ($ar)) {
$ar2=split("@",$val);
echo $ar2[0];
echo "<br>";
echo $ar2[1];
echo "<br><br>";
} 
 <?php
   asort($ar2);
?> 
<?php

    function cleanMyList($myFile) {
        $myArray = array_unique(file($myFile, FILE_IGNORE_NEW_LINES));

        usort($myArray, function($a, $b){
            preg_match_all("/(.*)@(.*)\./", $a, $m1);
            preg_match_all("/(.*)@(.*)\./", $b, $m2);

            if(($cmp = strcmp($m1[2][0], $m2[2][0])) == 0) {
                return strcmp($m1[1][0], $m2[1][0]);
            } else {
                return ($cmp < 0 ? -1 : 1);
            }

        });

        return $myTextFile = implode(PHP_EOL, $myArray);
    }

    echo "<pre>" . cleanMyList('emails.txt') . "</pre>";

?>
another-duplicate@email.com
hezi-gangina@gmail.com
tshiko-ve-diko@mail.ru
einlehasikuy@mertrix.com
ein-leha-sikuy@yahoo.com
metrixheshbon@yahoo.com
stus-ve-thsiko@yandex.ua
z-mkd@z-mkd.com