[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Задача от Valick'а
Страницы: 1, 2, 3, 4
Valick
я хочу предложить зарядку для мозга (и не только вам а всем желающим), а по скольку задача напрямую связана со спамом, решение лучше не показывать, а загрузить на хостинги просто показать результат работы скрипта. Ну и если будет желание то можно скинуть мне в личку, так как вроде я инициатор :), и я не спамер :)
Задача: необходимо написать функцию которая сортирует массив почтовых адресов, таким образом, чтобы одинаковые домены оказались равно-удалены друг от друга
пример:
было
Array
(
[0] => arut@mail.ru
[1] => qetr@mail.ru
[2] => outr@mail.ru
[3] => magn@mail.ru
[4] => zert@mail.ru
[5] => fito@mail.ru
[6] => poru@yandex.ru
[7] => dena@yandex.ru
[8] => dina@rambler.ru
[9] => dona@rambler.ru
[10] => rody@list.ru
[11] => mass@list.ru
[12] => kaba@list.ru
[13] => dert@list.ru
[14] => belu@list.ru
[15] => zerd@list.ru
[16] => gozy@spb.ru
[17] => edra@spb.ru
[18] => opta@spb.ru
)
стало
Array
(
[0] => arut@mail.ru
[1] => rody@list.ru
[2] => gozy@spb.ru
[3] => qetr@mail.ru
[4] => mass@list.ru
[5] => poru@yandex.ru
[6] => dina@rambler.ru
[7] => outr@mail.ru
[8] => kaba@list.ru
[9] => edra@spb.ru
[10] => magn@mail.ru
[11] => dert@list.ru
[12] => dena@yandex.ru
[13] => dona@rambler.ru
[14] => zert@mail.ru
[15] => belu@list.ru
[16] => opta@spb.ru
[17] => fito@mail.ru
[18] => zerd@list.ru
)


_____________
Стимулятор ~yoomoney - 41001303250491
Valick
неужели мое задание оказалось настолько сложным, что все делают вид, что оно никого не интересует?
приятно считать себя умнее всех вместе взятых smile.gif

_____________
Стимулятор ~yoomoney - 41001303250491
Игорь_Vasinsky
но но но. я на работе.

вчера тока разложил в подмассивы по доменам, потом спать лёг.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Игорь_Vasinsky
для комментаторов: не проверял типы, не кидал исключения - преднамеренно.

/**
* Класс ресортировки мыл по домену
* сортирует массив с мылом так, что мыло с одинаковыми доменами раскидываются друг от друга
*
@param array - мыльный массив
*
@return array - ресортированный мыльный массив
*/

class ResortEmails{
public $emails;
public $domain_zone;
public $count_domains;
private $temp_array;
public $sorted_in_line;

public function __construct($array_emails){
$this->emails = $array_emails;
$this->sorted_in_line = '';
}
/**
* Метод собирает ассоц. массив по доменам мыл
*/

protected function getDomainsZone(){
foreach($this->emails as $email){
$temp_str = explode("@", $email);
$this->domain_zone[$temp_str[1]][] = $email;
}

$this->count_domains = sizeof($this->domain_zone);
}
/**
* Сбрасывает ключи ассоц. массива
*/

private function resetKey(){
sort($this->domain_zone);
}

/**
* Соберёт новый промежуточный массив, с массивами - где ключи идентичны
*/

private function combineArray(){
for($i=0;$i<$this->count_domains;$i++){
foreach($this->domain_zone[$i] as $k=>$v){
$this->temp_array[$k][] = $v;
}
}
}

/**
* Раскидает в строку промежуточный массив
*/

private function sortedInLine(){
foreach($this->temp_array as $k=>$v){
$this->sorted_in_line .= implode(';',$v).';';
}
}

/**
* Возвращает ресортированный массив
*/

public function getEmailList(){
$this->getDomainsZone();
$this->resetKey();
$this->combineArray();
$this->sortedInLine();

$result = explode(";", rtrim($this->sorted_in_line,";"));
return $result;

}


}


$o = new ResortEmails($e);
$result = $o->getEmailList();


БЫЛО
Array
(
[0] => arut@mail.ru
[1] => qetr@mail.ru
[2] => outr@mail.ru
[3] => magn@mail.ru
[4] => zert@mail.ru
[5] => fito@mail.ru
[6] => poru@yandex.ru
[7] => dena@yandex.ru
[8] => dina@rambler.ru
[9] => dona@rambler.ru
[10] => rody@list.ru
[11] => mass@list.ru
[12] => kaba@list.ru
[13] => dert@list.ru
[14] => belu@list.ru
[15] => zerd@list.ru
[16] => gozy@spb.ru
[17] => edra@spb.ru
[18] => opta@spb.ru
)

СТАЛО

Array
(
[0] => dina@rambler.ru
[1] => poru@yandex.ru
[2] => gozy@spb.ru
[3] => arut@mail.ru
[4] => rody@list.ru
[5] => dona@rambler.ru
[6] => dena@yandex.ru
[7] => edra@spb.ru
[8] => qetr@mail.ru
[9] => mass@list.ru
[10] => opta@spb.ru
[11] => outr@mail.ru
[12] => kaba@list.ru
[13] => magn@mail.ru
[14] => dert@list.ru
[15] => zert@mail.ru
[16] => belu@list.ru
[17] => fito@mail.ru
[18] => zerd@list.ru
)


массивы различаются, но смысл то что ты сказал, по доменом "колода растосована"


можно в combineArray() - сортировать массив, чтобы сначала шли подмассивы по доменам с наибольшим кол-вом.

это уж как душе угодно.

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.