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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Фильтрация по white list 
:(
    Опции темы
Muerto
Дата 23.1.2011, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

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



Есть массив некий whitelist

Я получаю от пользователя данные, и я хочу узнать если часть текста совпадает с чем то в массиве whitelist

могу сделать foreach
но уверен что есть методы поумней какой нить preg_match который пройдет по массиву и полученными данными и вернет результат


--------------------
user posted image
PM MAIL   Вверх
Muerto
Дата 24.1.2011, 02:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

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



Не ясно вопрос задан =-( ?

Есть массив

Код

String[] str={'a','b','c'};


Как мне взять и по preg_match проверить если в слове abrakadabra есть 'a'или 'b' или 'c'

Массив размером допустим 100 

пока что пришло в голову foreach и pregmatch или strpos но эт не дело


--------------------
user posted image
PM MAIL   Вверх
enoff
Дата 24.1.2011, 03:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



первое, что пришло в голову
Код

str_replace(array("a", "b", "c"), "", "abrakadabra", $cnt);
echo $cnt;

а можно в цикле склеить регулярку.
PM MAIL ICQ Skype GTalk   Вверх
Muerto
Дата 24.1.2011, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

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



enoff, Спасибо уже лучше чем сейчас, если других идей не будет таки воспользуюсь


--------------------
user posted image
PM MAIL   Вверх
solenko
Дата 24.1.2011, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Я так понимаю, нужно проверить входит ли хоть какой-то элемент из whitelist в текст. Павильно?
тогда вот это:
Цитата(enoff @  24.1.2011,  02:58 Найти цитируемый пост)
первое, что пришло в голову
Код

str_replace(array("a", "b", "c"), "", "abrakadabra", $cnt);
echo $cnt;

а можно в цикле склеить регулярку. 

будет значительно менее эффективно чем 
foreach + strpos 
потому что будет:
1. Обрабатывать все элементы, даже если найдено вхождение первого же
2. Будет создавать копию текста и выполнять замену.




--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
enoff
Дата 24.1.2011, 18:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



solenko,
str_replace - ~3,6 сек.
strpos - ~0,3 сек.
Цитата(enoff @  24.1.2011,  03:58 Найти цитируемый пост)
а можно в цикле склеить регулярку. 

preg_match - 0.00014185905456543
PM MAIL ICQ Skype GTalk   Вверх
Muerto
Дата 24.1.2011, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1207
Регистрация: 23.9.2006

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



solenko а кто сказал что мы до конца будем идти если нашли? есть и break; есть и return =-)
А насчет whitelist вы правильно поняли...

Надо проверить если один из элементов массива присутствует в нашем String

Добавлено @ 21:03
enoff, Таки наверно склею регулярку  smile 

Это сообщение отредактировал(а) Muerto - 24.1.2011, 21:04


--------------------
user posted image
PM MAIL   Вверх
solenko
Дата 25.1.2011, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(Muerto @  24.1.2011,  20:02 Найти цитируемый пост)
solenko а кто сказал что мы до конца будем идти если нашли? есть и break; есть и return =-)

Код

str_replace(array("a", "b", "c"), "", "abrakadabra", $cnt);

ну не вижу я возможности тут вставить ни break ни return )

Цитата(Muerto @  24.1.2011,  20:02 Найти цитируемый пост)
enoff, Таки наверно склею регулярку

Вы прогоните несколько тестов на ожидаемых данных. Подозреваю, что производительность регулярки будет нелинейной.


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

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


 




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


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

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