![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
EasyTask |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 26.7.2010 Репутация: нет Всего: нет |
Добрый день! Интересно поискать способ решения для следующей проблемы:
У нас имеются некие данные, которые получаются построчно (mysql_fetch или построчное чтение из файла, важное условие - изначально мы не знаем количество полученных строк). Нам необходимо формировать из этих данных определенный стек и выполнять некое действие, когда в стеке накопится достаточное количество данных. Например: Построчное чтения из файла 1.txt строками в котором являются идентификаторы -- 1 Итерация мы сохраняем идентификатор из 1 строки -- 2 Итерация мы сохраняем идентификатор из 2 строки -- 3 Итерация мы сохраняем идентификатор из 3 строки -- В стеке накопилось три сообщения - выполняем некое действие Сейчас, в общем виде, у меня получилось такое решение для этой задачи: У меня существует определенный класс, который добавляет данные в стек и по накоплению заданного количества записей в стеке выполняет некое действие, проблема в том, что делать когда размер пакета не кратен количеству исходных данных. Например мы решили формировать пакеты из 3 сообщений стека, а в исходных данных у нас 11 строк. Последние 2 строки выпадут и не будут обработаны, т.к не будет добавлено третьего сообщения, обеспечивающего окончательное формирование пакета и выполнение обработки. Сейчас проблема решена таким образом, что после цикла получения данных, выполняется еще одна проверка, не осталось ли сообщений в стеке, и если они там есть - еще раз выполнить процесс обработки. Но мне не очень нравится этот подход, поэтому мне интересно послушать ваши решения - существует ли какой то способ, прямо внутри цикла определить что это последние получаемые данные и последний пакет нужно обрабатывать не полным? |
|||
|
||||
Arantir |
|
||||
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 16 Всего: 55 |
Люди такие интересные вопросы задают =) Это скорее философский вопрос, чем вопрос программирования. А что вам, собственно, мешает это определить внутри цикла? Возможно, ответив на этот вопрос вы сразу же найдете ответ и на свой. Вот небольшой условный пример, демонстрирующий складывание по 3 и выполнение каждые 3 или же при окончании данных:
-------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
||||
|
|||||
EasyTask |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 52 Регистрация: 26.7.2010 Репутация: нет Всего: нет |
этот вариант ничем не лучше представленного мной варианта
![]() |
|||
|
||||
skyboy |
|
||||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
алгоритмически это не решается, так как
вызывать за пределом цикла обработку вполне допустимо. единственный совет — вынести код обработки в отдельную функцию, чтоб это не был суровый копипаст на 20+ строк. |
||||
|
|||||
Aliance |
|
|||
![]() I ♥ <script> ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6418 Регистрация: 2.8.2004 Где: spb Репутация: 14 Всего: 137 |
Кстати, недавно прочитал о SplStack, может будет полезно: SPL
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |