Поиск подстроки. Как можно сделать по-другому?

Junkers

Новичок
Поиск подстроки. Как можно сделать по-другому?

Здравствуйте!

Вот есть текстовый файл, содержащий некие абзацы, разделенные такими вот символами: [1]Какой-то текст №1[/1] и т.д. Номера в квадратных скобках соответствуют id записей в MySQL.

Юзер выбирает какой-то абзац, его id передается скрипту через $_GET. Скрипт ловит его и выдает соответсующий абзац.

Необходимо, чтобы при $_GET['id'] = 1 на экран выводилось вот это: Какой-то текст №1 без ограничителей в квадратных скобках.

Делал вот так:

PHP:
$fp=fopen('path/to/file', 'r');
$content=file_get_contents('path/to/file');
fclose($fp);

$start=strpos($content, '['.$_GET['id'].']')+strlen('['.$_GET['id'].']');
$end=strpos($content, '['.$_GET['id'].']');
$text=substr($content, $start, ($end-$start));
echo $text;
Неуклюже, но работает. Может, есть более "изящный" способ?
 

alexhemp

Новичок
Junkers

Что за бред... зачем ты это в файлах хранишь? База зачем тогда тебе?
 

Junkers

Новичок
alexhemp
а зачем засовывать текст с html-форматированием примерно на 1 Мб в базу? По-моему, проще сохранить его в файле? Может, ошибаюсь...

kvf77, Фанат - спасибо за подсказку. Ваш вариант лучше и, как мне кажется, быстрее.

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

[1]Какой-то текст №1[/1]
[2]Какой-то текст №1[/2]

а не шли один за другим? По-моему, были какие символы, обозначающие перевод строки? Уместно ли использовать их для этой операции?
 

Steamroller

Новичок
а зачем засовывать текст с html-форматированием примерно на 1 Мб в базу? По-моему, проще сохранить его в файле? Может, ошибаюсь...
В базе ты можешь каждый абзац - отдельной записью держать, в таблице с полями (id int, paragraph text), тогда абзац с нужным номером будет выбирать очень просто, а главное - быстро.
А в мегабайтном файле регулярными выражениями искать - неэкономно.
 

Junkers

Новичок
Steamroller
Спасибо за совет - подумаю.

kvf77
Пробовал. В записываемую строку пишется "\n\r", однако новой строки не получается и выводится на экран вместе с этими символами. Функция nl2br() не помогла...
 

kvf77

Red Devil
Junkers

ну значит что-то не так или не там делаешь - отлаживай и проверяй
 

440hz

php.ru
Автор оригинала: Junkers
kvf77
Пробовал. В записываемую строку пишется "\n\r", однако новой строки не получается и выводится на экран вместе с этими символами. Функция nl2br() не помогла...
учим разницу между '' и "" строками?
 

Junkers

Новичок
sakon
Ты хочешь сказать, что, если эти символы поставить в двойные кавычки, то получится? Сейчас попробую...
 

Junkers

Новичок
sakon
Не сердись, когда я писал свое сообщение, ссылки еще не было.
Все получилось! Всем большое спасибо!
 
Сверху