Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Скорость работы. какие функции работают быстрей 
:(
    Опции темы
webaliser
  Дата 31.12.2007, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 15.12.2007

Репутация: нет
Всего: нет



Добрый день, уважаемые профессионалы!

Интересует вопрос теоретического характера: 

Дана текстовая переменная. 

1. Нужно произвести поиск фразы по переменной и зафиксировать позиции найденных фраз.
2. Нужно заменить все фразы переменной другой фразой (регистро-чувствительно smile )
3. Чтение контента между фразами 1 и 2 и его замена.

Не скрываю, цель - узкоспециализированный шаблонизатор. Но до этого далеко. Приветствуются не только примеры, но и посылания на правильный поиск и доку smile

всем спс.!

з.ы. Всех с наступащим
PM MAIL   Вверх
Alex13
Дата 1.1.2008, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 30.12.2005
Где: Новосибирск

Репутация: нет
Всего: 1



webaliser
1) strpos()
2) str_replace()
3) strstr() + strpos()

Если ничего не напутал с именами, то это - то, что вам требуется smile


--------------------
Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий.
Антисоциальный блог.
PM WWW ICQ Jabber   Вверх
Daevaorn
Дата 3.1.2008, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: нет
Всего: 70



Регулярные выражения.
PM MAIL WWW   Вверх
Alex13
Дата 4.1.2008, 09:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 30.12.2005
Где: Новосибирск

Репутация: нет
Всего: 1



Daevaorn, так они же, согласно документации, медленнее, чем обычные строковые функции?.. Разве нет?


--------------------
Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий.
Антисоциальный блог.
PM WWW ICQ Jabber   Вверх
skyboy
Дата 4.1.2008, 10:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



если просто заменить - то str_replace и правда за глаза хватит.
с другой стороны, не совсем понятно
Цитата(webaliser @  31.12.2007,  14:32 Найти цитируемый пост)
3. Чтение контента между фразами 1 и 2 и его замена.

возможно, через регулярные выражения будет яснее.
насчет скорости: надеюсь, это было действительно узкое по скорости место, что вместо гибкости ищется наиболее быстрое решение. В слысле, что запрос к БД не возщвращает в 100 раз больше строк, чем нужно, которые затем фильтруются на стороне РНР, вместо БД не используются файлы и прочие огрехи архитектуры убиты, и дело осталось только за оптимизацией на уровне функций...

PM MAIL   Вверх
Alex13
Дата 4.1.2008, 11:00 (ссылка) |  (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 280
Регистрация: 30.12.2005
Где: Новосибирск

Репутация: нет
Всего: 1



skyboy, я не возьмусь гарантировать выигрыш в скорости, тк не замерял, но это можно сделать с помощью двух вызовов strpos() и одного substr_replace().


--------------------
Самая страшная ошибка - это ошибка, не имеющая явных причин и конкретных последствий.
Антисоциальный блог.
PM WWW ICQ Jabber   Вверх
Daevaorn
Дата 5.1.2008, 02:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2155
Регистрация: 29.11.2004
Где: Москва

Репутация: нет
Всего: 70



Цитата(Alex13 @  4.1.2008,  10:10 Найти цитируемый пост)
так они же, согласно документации, медленнее, чем обычные строковые функции?.. Разве нет? 

В простых случаях чуть-чуть медленнее наверно. Но за-то они более гибкие и позволят в последствии расширить функционал "почти даром".
PM MAIL WWW   Вверх
Alpha
Дата 14.1.2008, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 29.10.2007
Где: Зеленоград

Репутация: нет
Всего: 1



Alex13, поправьте меня, если я не прав, но
strpos — Возвращает позицию первого вхождения подстроки
А Нужно произвести поиск фразы по переменной и зафиксировать позиции найденных фраз..

Это можно добиться например используя preg_match_all с флагом PREG_OFFSET_CAPTURE.

По третьему пункту помоему целесообразно использовать preg_replace, тем более что если были совпадения с шаблоном, будет возвращено измененное значение.

Ну и, как было сказано выше, гибкость..
PM MAIL WWW   Вверх
gemaglabin
Дата 10.2.2008, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 10.2.2008

Репутация: нет
Всего: нет



Для третьей задачи решение может быть двух типов

- копирование текста до конца первой фразы
- копирование текста с начала второй фразы и до конца строки
- объединение текста вида пункт1 . заменяемый текст . пункт2

Код

function str_mreplace ( $string , $phrase1 , $phrase2 , $text )
{
        
    $str_first    = substr ( $string , 0 , strpos ( $string , $phrase1 ) + strlen ( $phrase1) + 1 );
    $str_final    = substr ( $string , strpos ( $string , $phrase2 ) , strlen( $string ) );
    return $str_first . $text . $str_final;
        
}


или

- копирование текста от начала первой фразы до конца второй
- использование стандартной функции str_replace вида первая фраза . заменяемый текст . вторая фраза
Код

function str_sreplace  ( $string , $phrase1 , $phrase2 , $text )
{
    $str_temp    = substr ( $string , strpos ( $string , $phrase1 ) );
    $str_temp    = substr ( $str_temp , 0 , strpos ( $str_temp , $phrase2 ) + strlen ( $phrase2 ) );
    return str_replace     ( $str_temp , $phrase1 . $text . $phrase2 , $string);

}


Средняя скорость выполнения пяти тысяч на моем ноутбуке первого алгоритма 0.1200 сек , второго - 0.1500 сек . Наверное , алгоритмы не самые лучшие , но , думаю , такая мизерная разница неважна.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.0811 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.