PHP: сортировка писем по доменам
Эта функция отлично работает для сортировки списка по алфавиту и очистки всех двойников.
function cleanMyList($myFile)
{
$myTextFile=file_get_contents($myFile);
$myArray=explode("rn",$myTextFile);
$myArray=array_unique($myArray);
sort($myArray);
$myTextFile=implode("rn",$myArray);
return $myTextFile;
}
echo '<pre>'.cleanMyList('emails.txt').'</pre>';
exit;
Этот скрипт работает просто отлично, но теперь я хочу снова отсортировать его по поставщику электронной почты (другими словами: по домену), чтобы список был отсортирован дважды, сначала по алфавиту, а затем по поставщику электронной почты.
Вот пример:
Электронные письма.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
Электронная почта.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
2 ответа:
Это должно сработать для вас:
Я просто немного изменил ваш код. Сначала я беру твое досье с собой.file()
где я получаю ever line как элемент в массиве, где я беру только уникальные значения с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
$em="mynam@domain.com,second@second.com, third@third.com,fourth@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); ?>
- asort () - сортировка ассоциативных массивов по возрастанию в соответствии со значением
- ksort () - сортировка ассоциативных массивов по возрастанию в соответствии с ключом
- arsort () - сортировка ассоциативных массивов в порядке убывания по значению
- krsort () - сортировка ассоциативные массивы в порядке убывания, согласно ключу