| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Для профи > Скорость работы. |
| Автор: webaliser 31.12.2007, 15:32 |
| Добрый день, уважаемые профессионалы! Интересует вопрос теоретического характера: Дана текстовая переменная. 1. Нужно произвести поиск фразы по переменной и зафиксировать позиции найденных фраз. 2. Нужно заменить все фразы переменной другой фразой (регистро-чувствительно 3. Чтение контента между фразами 1 и 2 и его замена. Не скрываю, цель - узкоспециализированный шаблонизатор. Но до этого далеко. Приветствуются не только примеры, но и посылания на правильный поиск и доку всем спс.! з.ы. Всех с наступащим |
| Автор: Alex13 1.1.2008, 13:56 |
| webaliser, 1) strpos() 2) str_replace() 3) strstr() + strpos() Если ничего не напутал с именами, то это - то, что вам требуется |
| Автор: Daevaorn 3.1.2008, 21:58 |
| Регулярные выражения. |
| Автор: Alex13 4.1.2008, 09:10 |
| Daevaorn, так они же, согласно документации, медленнее, чем обычные строковые функции?.. Разве нет? |
| Автор: skyboy 4.1.2008, 10:52 |
| если просто заменить - то http://php.net/str_replace и правда за глаза хватит. с другой стороны, не совсем понятно возможно, через регулярные выражения будет яснее. насчет скорости: надеюсь, это было действительно узкое по скорости место, что вместо гибкости ищется наиболее быстрое решение. В слысле, что запрос к БД не возщвращает в 100 раз больше строк, чем нужно, которые затем фильтруются на стороне РНР, вместо БД не используются файлы и прочие огрехи архитектуры убиты, и дело осталось только за оптимизацией на уровне функций... |
| Автор: Alex13 4.1.2008, 11:00 |
| skyboy, я не возьмусь гарантировать выигрыш в скорости, тк не замерял, но это можно сделать с помощью двух вызовов strpos() и одного substr_replace(). |
| Автор: Alpha 14.1.2008, 11:48 |
| Alex13, поправьте меня, если я не прав, но strpos — Возвращает позицию первого вхождения подстроки А Нужно произвести поиск фразы по переменной и зафиксировать позиции найденных фраз.. Это можно добиться например используя preg_match_all с флагом PREG_OFFSET_CAPTURE. По третьему пункту помоему целесообразно использовать preg_replace, тем более что если были совпадения с шаблоном, будет возвращено измененное значение. Ну и, как было сказано выше, гибкость.. |
| Автор: gemaglabin 10.2.2008, 14:08 | ||||
| Для третьей задачи решение может быть двух типов - копирование текста до конца первой фразы - копирование текста с начала второй фразы и до конца строки - объединение текста вида пункт1 . заменяемый текст . пункт2
или - копирование текста от начала первой фразы до конца второй - использование стандартной функции str_replace вида первая фраза . заменяемый текст . вторая фраза
Средняя скорость выполнения пяти тысяч на моем ноутбуке первого алгоритма 0.1200 сек , второго - 0.1500 сек . Наверное , алгоритмы не самые лучшие , но , думаю , такая мизерная разница неважна. |