Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: создание файлов для каздых 10 записей

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
MBmusic
Отправлено: 12 Августа, 2013 - 12:35:47
Post Id


Посетитель


Покинул форум
Сообщений всего: 481
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




в общем из базы выводится 735 строк......нужно разбить все эти строки по 10 строк и создать столько файлов......то есть должно получится 74 файла......во всех кроме последнего будет по 10 строк записано, а в последний 5......тут нужно как то через циклы сформировать и создать эти файлы......помогите плз...

я так понимаю нужно пройти 10 строк, и создать файл, потом опять 10 строк и файл и так до конца....
 
 Top
Denkill
Отправлено: 12 Августа, 2013 - 12:44:51
Post Id



Посетитель


Покинул форум
Сообщений всего: 330
Дата рег-ции: Янв. 2013  
Откуда: Барнаул


Помог: 7 раз(а)




PHP:
скопировать код в буфер обмена
  1.  
  2. $row = mysql_fetch_assoc($sql);
  3. for($i=0,$k=0;$i<count($row);$i++){
  4.  if($i%10==0){fclose($file);$file = fopen($k.".txt","a");}
  5.  fputs($file,$row[$i]);
  6. }
  7.  

Что то типо этого


-----
Хо-Хо-Хо
 
 Top
avtor.fox
Отправлено: 12 Августа, 2013 - 12:52:55
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)




PHP:
скопировать код в буфер обмена
  1. $i = 0; $e = 31; $c = 0;
  2. $tmp  = '';
  3. while($i++ < $e)
  4. {
  5.         $tmp .= $i.' строка'.PHP_EOL;
  6.         if(!($i%10) or ($i == $e && $i%10)){
  7.                 file_put_contents(++$c.'_file.tmp', $tmp);
  8.                 $tmp = null;
  9.         }
  10. }

(Отредактировано автором: 12 Августа, 2013 - 12:55:28)

 
 Top
MBmusic
Отправлено: 12 Августа, 2013 - 12:53:15
Post Id


Посетитель


Покинул форум
Сообщений всего: 481
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




не работает......тут лучше разобратся...

PHP:
скопировать код в буфер обмена
  1.  
  2. for($i = 1; $i < count($ull); $i = ++)
  3.  


тут мы проходим по всем 735 записям.....
дале в этом цикле доходя до каждой 10 записи мы создаем файл, ну и для последних 5 записей тоже файл, ведь у нас 735 записей......кстате в базе постоянно записи добавляются......по этому щас записей 735, а завтра уже может быть 843......
(Добавление)
avtor.fox ого) как то сложно написали)
 
 Top
avtor.fox
Отправлено: 12 Августа, 2013 - 12:56:32
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)




MBmusic пишет:
как то сложно написали)

немного упростил. и что сложного?
 
 Top
MBmusic
Отправлено: 12 Августа, 2013 - 12:59:22
Post Id


Посетитель


Покинул форум
Сообщений всего: 481
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




а вот такой вопрос......вот у меня в цикле теперь по 10 записей будет добавлятся......то есть 10, 20, 30 ......и мне терь нужно давать имена файлам, ну то есть для первых 10 это файл №1, для вторых 10 файл №2 и так далее......то есть у меня будет так: 1, 2, 3 ... 75
 
 Top
avtor.fox
Отправлено: 12 Августа, 2013 - 13:03:53
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)




MBmusic, в чём собственно вопрос? В моём примере всё это есть. И ежели имеется остаток больше нуля и меньше 10, то он тоже запишется в файл.
 
 Top
DelphinPRO
Отправлено: 12 Августа, 2013 - 13:17:08
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Вариантик
PHP:
скопировать код в буфер обмена
  1. $resource = mysql_query('ЗАПРОС');
  2. $result = array();
  3.  
  4. // Получить все записи в линейный массив
  5. while($row = mysql_fetch_assoc($resource)) $result[] = $row;
  6.  
  7. // Разбить на части по 10 элементов
  8. $result = array_chunk($result, 10);
  9.  
  10. foreach($result as $num => $chunk) { // Пройтись по частям
  11.   $s == '';
  12.   foreach ($chunk as $tablerow) { // Пройтись по элементам каждой части
  13.      $s .= $tablerow['id'] . $tablerow['title'] .... "\n"; // Сформировать строку данных
  14.   }
  15.   file_put_contents($num . '.txt', $s); // Записать в файл
  16. }


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
avtor.fox
Отправлено: 12 Августа, 2013 - 13:25:14
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)




DelphinPRO, зачем лишние манипуляции с массивами? Улыбка

Но в таком случае, можно и

PHP:
скопировать код в буфер обмена
  1. $i = range(0, 53);
  2. array_map(function($v) use (&$c){
  3.         file_put_contents(++$c.'_file.tmp', join(PHP_EOL, $v));
  4. }, array_chunk($i, 10));


Закатив глазки (Отобразить)
 
 Top
DelphinPRO
Отправлено: 12 Августа, 2013 - 13:29:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




avtor.fox зато с комментариями Улыбка
(Добавление)
Да и данных там, судя по всему, не много, чтобы заморачиваться..


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
avtor.fox
Отправлено: 12 Августа, 2013 - 13:35:04
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)




DelphinPRO, да, комментарии я почему-то игнорирую.
И тут может проблема у ТС возникнуть. Не переписывать же файлы каждый раз, нужна дозапись.
 
 Top
imya
Отправлено: 12 Августа, 2013 - 13:40:46
Post Id



Участник


Покинул форум
Сообщений всего: 1472
Дата рег-ции: Сент. 2012  
Откуда: Запорожье, Украина


Помог: 19 раз(а)




DelphinPRO пишет:
Вариантик


? Радость

(Отредактировано автором: 12 Августа, 2013 - 13:41:04)



-----
PHP:
скопировать код в буфер обмена
  1. do {box != cat;} while (cat != box);


Когда нормальный человек, уезжая из дома одевает на жену пояс верности, веб-дизайнер ставит на нее счетчик...
 
My status
 Top
EuGen Администратор
Отправлено: 12 Августа, 2013 - 13:45:22
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




avtor.fox пишет:
надо углубиться в ресурсозатраты рекурсивного обхода и прочих штук, которые работают с массивами и тому подобным. а то советую тут)

Что тут углубляться. Вы создаёте:
* Копию данных в array_chunk (по объёму чуть больше, чем сами данные, за счёт накладных расходов)
* Полный диапазон чисел от 0 до максимума (в range)
* Копию куска данных в каждой итерации по разбиению через array_chunk
Итог: данные + копия + K * копия/K + диапазон = O(4N)
Для небольших объемов это подойдёт, но при счёте хотя бы на сотни тысяч стоит задуматься.
Работа с набором записей, работа с файлами, работа с потоками - всё это те случаи, когда обрабатывать их массивами, в общем случае (то есть при неизвестных объемых входных данных) - плохая идея.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
avtor.fox
Отправлено: 12 Августа, 2013 - 14:17:34
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


Помог: 50 раз(а)




EuGen пишет:
Для небольших объемов это подойдёт, но при счёте хотя бы на сотни тысяч стоит задуматься.

Естественно. Но думаю, что нужды ТС до этого не дойдут.

Но мой вопрос немного в другом.
Я всегда отталкиваюсь от количества данных, которые необходимо обработать. Знаю, что вывод постов идёт по 10 штук на страницу (например) и обрабатываю пришедшие данные, допустим, функцией array_walk. А большее количество данных уже обхожу foreach, так как он работает не с их копией, а с исходным массивом (насколько я знаю).
Так вот. Как работать и с чем работать — непосредственный выбор разработчика? Панацея ли следить за лишними тремя или четырьмя тысячными секунды и 20kB в пользу более "неинтересной" обработки данных? Не говорим о многомиллионных записях, а так, пара тысяч.

EuGen пишет:
то есть при неизвестных объемых входных данных

В нашем же случае неизвестно сколько будет строк на выходе, но мы можем контролировать их поведение условием. Наверно вопрос о возможном количестве строк и получается, что лучше их обработать в
PHP:
скопировать код в буфер обмена
  1. while($row = $iQuery->fetch_assoc()){}
, что лучше чем array_map и тому подобное?
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB