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

Как можно искать частичную строку при вводе (для не использования MySQL) как ПОДОБНАЯ функция в MySQL, но использовании PHP при поиске строки, например.

<?php    

$string = "Stackoverflow";

$find = "overfl";

if($find == $string)
{
    return true;
}
else
{
    return false
}

?>

Но это будет, очевидно, работать, не будет, но быть там функцией, где можно искать частично строки? Это было бы большим :)

Править:

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

если я использую ремни для правки бритв, это делает эхо, Если я использую его, это идет как truetruetruetruetrue.

5
задан MacMac 18 July 2010 в 20:12
поделиться

3 ответа

Я обычно использую strpos

$needle='appy';
$haystack='I\'m feeling flappy, and you?';

if(strpos($haystack,$needle)!==false){
   //then it was found
   }

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

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

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

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

Эта функция может возвращать логическое значение. ЛОЖЬ, но также может возвращать не-логическое значение, которое оценивается как ЛОЖЬ, например 0 или "". Пожалуйста прочти раздел о логических значениях для получения дополнительной информации Информация. Используйте оператор === для тестирование возвращаемого значения этого функция.

Что касается массивов, strpos принимает две строки. Использование массива приведет к Предупреждение: strpos () ожидает, что параметр 1 будет строкой, заданным массивом или 1Warning: strpos (): игла не является строкой или целым числом`.

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

Вы можете

$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.

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

13
ответ дан 18 December 2019 в 08:26
поделиться

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

if(strstr($string,$find)!==false){
    //true
} 
3
ответ дан 18 December 2019 в 08:26
поделиться

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

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

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

3
ответ дан 18 December 2019 в 08:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: