此功能可以完美地按字母顺序对列表进行排序并清除所有双打。
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;
这个脚本运行得很好,但现在我要做的是通过电子邮件提供商再次对它进行排序(换句话说:按域名),这样列表就会被排序两次,首先按字母顺序排序,然后通过电子邮件提供商进行排序。
以下是一个例子:
emails.txt(之前):
hezi-gangina@gmail.com
z-mkd@z-mkd.com
ein-leha-sikuy@yahoo.com
metrixheshbon@yahoo.com
metrixheshbon@yahoo.com
metrixheshbon@yahoo.com
stus-ve-thsiko@yandex.ua
tshiko-ve-diko@mail.ru
einlehasikuy@mertrix.com
hezi-gangina@gmail.com
einlehasikuy@mertrix.com
einlehasikuy@mertrix.com
einlehasikuy@mertrix.com
another-duplicate@email.com
another-duplicate@email.com
another-duplicate@email.com
another-duplicate@email.com
another-duplicate@email.com
email.txt之后:
another-duplicate@email.com
ein-leha-sikuy@yahoo.com
einlehasikuy@mertrix.com
hezi-gangina@gmail.com
metrixheshbon@yahoo.com
stus-ve-thsiko@yandex.ua
tshiko-ve-diko@mail.ru
z-mkd@z-mkd.com
但是我希望更进一步得到这个(按域排序):
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
答案 0 :(得分:2)
这应该适合你:
我刚刚改变了你的代码。首先,我使用file()
抓取您的文件,我将其作为数组中的元素行,我只使用array_unique()
获取唯一值。在此之后,我使用usort()
对数组进行排序,在那里我检查域是否相同,如果是,则按字母顺序对其进行排序。
<?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
答案 1 :(得分:0)
$ EM =“mynam @ domain.com,第二@ second.com, 第三@ third.com,第四@ fourth.com“; 将电子邮件拆分为两部分
$ar=split(",",$em);
while (list ($key, $val) = each ($ar)) {
$ar2=split("@",$val);
echo $ar2[0];
echo "<br>";
echo $ar2[1];
echo "<br><br>";
}
排序数组(升序),根据值 - asort()
<?php
asort($ar2);
?>