Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Сортировка массивов
 
 автор: Albatros   (08.05.2009 в 11:22)   письмо автору
 
 

Доброго времени суток форумчане

Наличиствуют таблица новостей и таблица подписчиков. Подпсчики подписаны на новости с учетом времени когда им должно придти письмо с выборкой по городам регионам и т.д. У каждой новости ессно также указаны те же параметры выборки. В общем после прохода циклом по новостям(допустим за последний час) выясняем(с учетом выборки которую указал подписчик) на какие емэлы должна уйти отдельно взятая новость:

новость 1
Array
(
    [0] => mail 1@mail.ru
    [1] => mail 2@mail.ru
    [2] => mail 3@mail.ru
)

новость 2
Array
(
    [0] => mail 1@mail.ru
    [1] => mail 3@mail.ru
)

новость 3
Array
(
    [0] => mail 3@mail.ru
    [1] => mail 2@mail.ru
    [2] => mail 4@mail.ru
    [3] => mail 10@mail.ru
    [4] => mail 12@mail.ru
    [5] => mail 7@mail.ru

)


И в общем все бы ничего, но в данном случае получается, что на mail 3@mail.ru уйдет подряд три письма. Собственно вопрос: что зделать с этими массивами, что бы на ящик mail 3@mail.ru ушло одно письмо, но с тремя новостями?

  Ответить  
 
 автор: Trianon   (08.05.2009 в 11:29)   письмо автору
 
   для: Albatros   (08.05.2009 в 11:22)
 

сформируйте инверсный массв
Array
(
    [mail 1@mail.ru] => Array( 1,  2)
    [mail 2@mail.ru] => Array( 1,  3)
    [mail 3@mail.ru] => Array( 1, 2,  3)
    [mail 4@mail.ru] => Array(3)
    [mail 7@mail.ru] => Array(3)
    [mail 10@mail.ru] => Array(3)
    [mail 12@mail.ru] => Array(3)
)

  Ответить  
 
 автор: Albatros   (08.05.2009 в 11:56)   письмо автору
 
   для: Trianon   (08.05.2009 в 11:29)
 

Ну вот собственно я и не пойму как сформировать его

  Ответить  
 
 автор: Trianon   (08.05.2009 в 12:03)   письмо автору
 
   для: Albatros   (08.05.2009 в 11:56)
 

то есть... как?
for(...)
{
   $mail = ...;
   $news_id = ...;
   $inv[$mail][] = $news_id;
}

  Ответить  
 
 автор: Albatros   (08.05.2009 в 13:18)   письмо автору
 
   для: Trianon   (08.05.2009 в 12:03)
 

Извините, но я не понимаю. Опишите пожайлуста последовательность действий.

  Ответить  
 
 автор: Trianon   (08.05.2009 в 13:43)   письмо автору
 
   для: Albatros   (08.05.2009 в 13:18)
 

Имеется (у Вас ) цикл, который из каких-то (Ваших) источников определяет идентификатор новости $news_id и email подписчика $mail.

оператор $inv[$mail][] = $news_id; внутри этого цикла сформирует такой массив.

  Ответить  
 
 автор: Albatros   (08.05.2009 в 14:42)   письмо автору
 
   для: Trianon   (08.05.2009 в 13:43)
 

каким образом?
Опишу ситуацию подробней. Делается запрос к БД (к таблице новостей) вытаскивающий записи за последний час. В цикле получаем id новости и передаём его параметром в функцию выясняющюю кому эту новость рассылать(вызов функции находится есно также в этом же цикле). В вызываемой функции также имеется цикл, формирующий конкретные адреса.

дампы массивов в первом посте и есть результат работы всего этого кода.

$inv[$mail][] = $news_id при таком раскладе формирует одинаковый айдишник для всех адресов(при одной итерации внешнего цикла)

Если не понятно могу код привести

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования