Поиск в строке

Статус
В этой теме нельзя размещать новые ответы.

Vin-Diesel

Новичок
Поиск в строке

Есть массив, есть строка:
PHP:
$ar = array('<10>','<12>','1000');
$str = '<10><102>ferere<105><1000>';
Нужно проверить нет ли в строке, значений из массива, учитывая ,что размер массива может быть больше.
Подскажите функцию:)
 

Румата

Новичок
Vin-Diesel
Какие могут быть реальные размеры значений в массиве и какая может быть длина строки?
 

qwelp

Новичок
Код:
<?php
$str = '<10><102>ferere<105><1000>';
$result = strpos($str, 'ferere');
if ($result === false)
	echo 'Не найдено';
else 
	echo 'Найдено в позиции' .$result;
?>
 

Sergey_Al

Новичок
AP, конечно может повлиять, ведь есть разные способы нахождения подстроки в строке, например алгоритм Кнута-Мориса-Пратта. Правда в PHP он скорее всего не оптимальное решение :)
 

Румата

Новичок
AP
Очень даже повлияет. Попробуйте стандартными алгоритмами попытаться найти подстроку длины скажем 10^4 в строке длины 10^18.
(10^18*(10^18-10^4+1))~=10^36 операций - довольно, скажем, интересно :)
КМП - как вариант поиска.

Sergey_Al КМП - он оптимален везде или в чем-то я ошибаюсь? :)
 

phprus

Moderator
Команда форума
Румата
Очередной испытатель сферических коней в вакууме.
10^18 байт ~= 931 322 574 гигабайт.
Такая строка у тебя не то что в оперативную память не влезет, ты ее даже на дисках не сохранишь, так как врядли тут ктото обладает дисками объемом примерно 931 322 Терабайт.

Так что на всех реально возможных строках, которые можно обработать при помощи php за приемлимое время использование strpos даст наибольшую скорость (Так как я не уверен, что preg_match будут работать быстрее цикла + strpos, хотя тут я могу и ошибаться)
 

Фанат

oncle terrible
Команда форума
Вообще-то, логичнее было бы попросить реальный ПРИМЕР данных, а не их размер.
 

Sergey_Al

Новичок
Румата, ну мне кажется, что построение функции сдвигов, а потом пробег по массиву в PHP, с учётом того, что это всё будет как-то обрабатываться PHP, а не выполняться как машинный код, будет дольше чем strpos или preg_match.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху