Поиск частичных строк PHP

Как вы можете искать частичную строку при наборе текста (не использовать MySQL), как функция LIKE в MySQL, но используя PHP при поиске строки, например

<?php $string = "Stackoverflow"; $find = "overfl"; if($find == $string) { return true; } else { return false } ?> 

Но это, очевидно, будет работать не будет, но есть ли функция, в которой вы можете искать частично строку? Это было бы прекрасно 🙂

РЕДАКТИРОВАТЬ:

Что, если это было в массиве?

если я использую strpos, он делает эхо, если я его использую, это похоже на truetruetruetruetrue.

Я предпочитаю использовать strpos

 $needle='appy'; $haystack='I\'m feeling flappy, and you?'; if(strpos($haystack,$needle)!==false){ //then it was found } 

Если вы хотите, чтобы он игнорировал случай, используйте stripos .

Обратите внимание, что тонкость в этом состоит в том, что если игла находится в самом начале стога сена, в позиции 0 возвращается целое число 0. Это означает, что вы должны сравнивать с false , используя строгое сравнение, или это может привести к ложному отрицанию.

Как указано в руководстве, приведенном выше

Предупреждение

Эта функция может возвращать Boolean FALSE, но может также возвращать небулевое значение, которое оценивается как FALSE, например 0 или «". Пожалуйста, прочитайте раздел о Booleans для получения дополнительной информации. Используйте оператор === для проверки возвращаемого значения этой функции.

Что касается использования массивов, то strpos предназначен для двух строк. Использование массива приведет к Warning: strpos() expects parameter 1 to be string, array given или 1Warning: strpos (): needle не является строкой или целым числом.

Хорошо, допустим, у вас есть массив строк для поиска.

Ты можешь

 $needles=array('hose','fribb','pancake'); $haystack='Where are those pancakes??'; foreach($needles as $ndl){ if(strpos($haystack,$ndl)!==false){ echo "'$ndl': found<br>\n"; } else{ echo "'$ndl' : not found<br>\n"; } } 

Другой способ поиска нескольких строк в одной строке без использования массива … Это говорит только о том, было найдено хотя бы одно совпадение.

 $haystack='Where are those pancakes??'; $match=preg_match('#(hose|fribb|pancake)#',$haystack); //$match is now int(1) 

Или, используйте preg_match_all, чтобы узнать, сколько совпадений есть, всего.

 $all_matches=preg_match_all('#(hose|fribb|pancake)#',$haystack,$results); //all_matches is int(2). Note you also have $results, which stores which needles matched. 

В этом случае поисковый термин является регулярным выражением. () объединяет термины вместе и | означает «или». # обозначает начало и конец шаблона. Регулярные выражения могут быстро усложняться, но, конечно же, они работают! Их часто избегают по соображениям производительности, но если вы тестируете несколько строк, это может быть более эффективным, чем описанный выше метод циклизации массива. Я уверен, что есть и другие способы сделать это.

strstr () / stristr () (последнее нечувствительно к регистру)

 if(strstr($string,$find)!==false){ //true } 

strpos() может это сделать.

 if(strpos($string, $find) !== false) . . . 

Обратите внимание, что он может возвращать 0, поэтому используйте оператор type-equals.