Как определить, входит ли слово (подстрока) в строку? НЕ strpos

Kood-Good

Новичок
Как определить, входит ли слово (подстрока) в строку? НЕ strpos

Нужно определить входит ли слово (или несколько) в какую-нить фразу.
Например имеем слово car. Проверяем следующие строки:

1. car driver
2. green card
3. little car on street

strpos скажет что подойдут все строки, а мне нужны только 1 и 3
 

Kood-Good

Новичок
вот блин... не хотелось бы исполдьзовать эту функцию, т.к работает она не очень быстро. другого способа нет?
 

Vladson

Сильнобухер
Она работает всё равно быстрее чем другие способы...
 

zerkms

TDD infected
Команда форума
avm
там ещё могут быть и знаки препинания
 

Solid

Drosera anglica
Kood-Good
Глупости. Не покривлю душой, если скажу, что программируя на PHP, о производительности вот таких тонких моментов надо думать, ну если не в последнюю очередь, то уж точно в предпоследнюю.
 

zerkms

TDD infected
Команда форума
avm
тем более, что вы это заметили ;) зачем тогда было предлагать вариант, который в принципе не подходит? тут вроде как за число мессаджей не платят.
ведь не платят, да? ;)
 

avm

Новичок
zerkms. для того чтобы топикстартер в будущем знал и про такой простейший вариант. А то он был убежден:
strpos скажет что подойдут все строки, а мне нужны только 1 и 3
до моего ответа здесь было только одно принципиальное решение - ваше.
Ну а про знаки препинания уже вы сами выдумали.
 

zerkms

TDD infected
Команда форума
avm
боюсь что ваш "простейший" вариант не сможет возвратить строку 1 как искомую, хотя она таковой является
 

Vladson

Сильнобухер
Разврат :)
PHP:
<?php
/*
 * Продукт защищён авторскими правами 
 * использование стоит десять тысщчь бабок :)
 */
function strpos_by_vladson($string, $find) {
  $array = array(' ', ',', '.'); //знаки припинания
  $pos = stripos($string, $find);
  if (false !== $pos) {
    $before = $pos-1;
    $after = $pos+strlen($find);
    if (array_search($string[$before] , $array) && array_search($string[$after] , $array)) {
      return $pos;
    }
  }
}
?>
 

avm

Новичок
zerkms, а вы не бойтесь... просто еще раз посмотрите.

и кстати, для использования предложенного мной варианта эффективнее строки хранить сразу с пробелами (разделителями), чтобы не добавлять их каждый раз при проверке...

Ессно, регулярки для большинства случаев много удобнее, практичнее, и вернее. Но бывают разные случаи ;)
 

Kood-Good

Новичок
avm, спасибо, ваш спсоб - именно то, зачем тема и открывалась. знаков припенания в моих фразах не предусмотрено, а значит способ подходит.
к вопросу о приоритете производительности: возможно в рядовой задаче не принципиально использование strpos вместо preg. но у меня обработка идет в сложном цикле, и тысячные доли секунд играют большую роль
 
Сверху