Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   PHP (http://www.flasher.ru/forum/forumdisplay.php?f=20)
-   -   как вывести данные из конца файла? (http://www.flasher.ru/forum/showthread.php?t=58764)

полосатый КОТ. 28.05.2004 16:10

как вывести данные из конца файла?
 
есть книжка гостевая:
<?
$fn="baza_gost.dat";
$data=file($fn);
$x=count($data);
$z=$x-3;
for($i=$z; $i<$x; $i++)
{
$line=explode("|", $data[$i]);

echo($line[1]);
echo($line[2]);
echo($line[3]);
}
?>

выводит 3 последних сообщения, но сначала файла. т.е.
позавчера
вчера
сегодня

а надо бы (с конца файла):
сегодня,
вчера,
позавчера.

как? плиз :confused:

Unknown 28.05.2004 16:25

легче прочитать весь файл в массив, а потом просто три последние ячейки просмотреть. Если файл очень большой и читать весь в массив не хочется (хотя вроде особо много времени это едва ли займет, но все же...), то перематываешь на конец файла (fseek($fp, 0, SEEK_END); ), затем от туда посимвольно считываешь информацию, при получении символа "|", отделяешь предыдущие полученные символы в отдельную переменную (ячейку массива) и так до трех раз. Короче пишешь свою упрощенную функцию explode, которая действует задом-на-перед. Но все же если файл не большорй, незачем фигней страдать и легче считать его весь, а из массива выбрать последние элементы.

полосатый КОТ. 28.05.2004 17:31

я уже понял что в моем случае лучше массив использовать+
 
но я настолько чайник, что не знаю как((( :confused:

только вот потихоньку начинаю вникать в PHP.

нашел даже такую функцию как: array_reverse
пытаюсь ее использовать-ничего не получается выводиться только три пустых поля:

$input=array("baza_gost.dat");
$fn = array_reverse($input);
$x=count($fn);
$z=$x-3;
for($i=0; $i<$x; $i++)
{
$line=explode("|", $data[$i]);

наверное я как-то или неправильно задаю массив или его читаю.
:confused:

полосатый КОТ. 28.05.2004 18:11

ну я и тормоз))))
 
как читать с конца я понял)))
теперь думаю о том как последние три сделать, в старом варианте читает последние две и самую первую запись.
:)

$fn =file("baza_gost.dat");
$data= array_reverse($fn );
$x=count($data);
for($i=0; $i<$x; $i++)
{
$line=explode("|", $data[$i]);

полосатый КОТ. 28.05.2004 18:17

вот и с последними все понятно)))
 
всего-то:
for($i=0; $i<3; $i++)

массив-то перевернут и можно просто считать первые 3

как все просто оказывается))

стоит только вдуматься и книжки почитать))) :D

Constantine 28.05.2004 18:50

Ну вот и молодца, а ведь на сколько приятней самому проблему разрулить! ;)

Unknown 28.05.2004 19:38

Re: вот и с последними все понятно)))
 
Цитата:

Оригинал написал(а) полосатый КОТ.
всего-то:
for($i=0; $i<3; $i++)

массив-то перевернут и можно просто считать первые 3

как все просто оказывается))

стоит только вдуматься и книжки почитать))) :D

ну об этом я вначале и говорил :) только одно но, если вдруг книга твоя разрастется... эдак до размеров этого форума, что едва ли осуществимо, но все же в теории, то читаться будет весь файл, а это очень долго, поэтому логичнее прочитать лишь нужные записи, но поскольку, я думаю файл никогда у тебя не превысит размеров больше 700 кбайт примерно, то все ок.

полосатый КОТ. 28.05.2004 20:16

спасибо за участие)
 
:) :)

nagash 29.05.2004 01:40

ненадо так делать =)
просто совет на будущее...
всё выше предложеное жуткие варинты...


Часовой пояс GMT +4, время: 23:17.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.