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
Форумы портала PHP.SU :: Версия для печати :: Как вытащить данные из файла до символа \n
Форумы портала PHP.SU » » Работа с файловой системой и файлами » Как вытащить данные из файла до символа \n

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

1. Maskca - 17 Сентября, 2011 - 20:41:06 - перейти к сообщению
Здравствуйте, допустим есть некий файл с данными, и нужно вытащить данные из файла в какой нибудь массив, в каждую часть которого попадают данные до символа /n.
Подскажите как это осуществить?
2. White - 17 Сентября, 2011 - 21:32:14 - перейти к сообщению
3. caballero - 17 Сентября, 2011 - 21:39:10 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $content = fread(...
  2.  
  3. $array = explode("\n",$content);
4. White - 17 Сентября, 2011 - 21:44:42 - перейти к сообщению
caballero зачем? для этого в php есть уже готовая функция
к тому же в вашем методе потребуется в 2 раза больше памяти, а если файл большой это принципиально.
5. Мелкий - 17 Сентября, 2011 - 22:21:16 - перейти к сообщению
White пишет:
зачем? для этого в php есть уже готовая функция

Однако explode(PHP_EOL,file_get_contents()) окажется быстрее. И чем больше файл - тем быстрее, из-за memory mapping. http://habrahabr[dot]ru/blogs/php/102598/

Ну и само собой, ни file ни file_get_contents не помогут, если файл больше объёма дозволенной памяти. Тогда только построчное чтение.
6. caballero - 17 Сентября, 2011 - 22:22:01 - перейти к сообщению
Согласен. Было бы проще если бы аффтар написал - "есть текстовый файл желаю считать построчно в массив". А то даже /n криво написал
7. Мелкий - 17 Сентября, 2011 - 22:25:20 - перейти к сообщению
caballero пишет:
есть текстовый файл желаю считать построчно в массив

Так именно это автор и написал. Однако
8. White - 17 Сентября, 2011 - 22:42:14 - перейти к сообщению
Мелкий быстрее, согласен это тема уже поднималась на форуме. однако в указанном методе сначала выделяется память под считывание всего файла, а потом столько же под массив. итого если мы имеем 2Мб памяти и 1.5Мб файл мы сможем считать его в массив с помощью file() но не сможем сделать того же с помощью file_get_contents.
в любом случае придется идти на компромисс либо в скорости либо в памяти.
9. caballero - 17 Сентября, 2011 - 22:48:08 - перейти к сообщению
Цитата:
Так именно это автор и написал


Не так

Цитата:
есть некий файл с данными
10. Мелкий - 17 Сентября, 2011 - 23:05:38 - перейти к сообщению
caballero пишет:
Не так

А если прочитать всё предложение?
11. Maskca - 18 Сентября, 2011 - 10:20:45 - перейти к сообщению
подскажите еще, как узнать конец массива, допустим я вытащил данные из массива так:

Как мне узнать его размерность, чтобы вывести
PHP:
скопировать код в буфер обмена
  1.  
  2. $i = 0;
  3. while(???)
  4. {
  5. echo $array[$i];
  6. $i++;
  7. }
  8.  
12. LIME - 18 Сентября, 2011 - 10:33:03 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. foreach ($array as $val)
  2.      echo $val;

(Добавление)

еслибы новичек мог правильно сформулировать задачу он бы скорее всего сам был бы способен ее решить
приходится догадываться
13. Maskca - 19 Сентября, 2011 - 10:47:40 - перейти к сообщению
LIME пишет:
PHP:
скопировать код в буфер обмена
  1. foreach ($array as $val)
  2.      echo $val;

Подскажите, а можно ли сделать вывод из файла в обратном порядке - с конца, так как с базы данных через desc?
14. Мелкий - 19 Сентября, 2011 - 11:05:23 - перейти к сообщению
Maskca пишет:
Подскажите, а можно ли сделать вывод из файла в обратном порядке - с конца

array_reverse
Или лучше for'ом:
PHP:
скопировать код в буфер обмена
  1. for ($i = count($arr)-1; $i>=0; --$i) echo $arr[ $i ];
15. LIME - 19 Сентября, 2011 - 11:13:46 - перейти к сообщению
имхо лучше получать из базы в нужном порядке

 

Powered by ExBB FM 1.0 RC1