Поиск частичных строк PHP - PullRequest
5 голосов
/ 18 июля 2010

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

<?php    

$string = "Stackoverflow";

$find = "overfl";

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

?>

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

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

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

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

Ответы [ 3 ]

13 голосов
/ 18 июля 2010

Я склонен использовать strpos

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

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

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

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

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

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

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

Что касается использования массивов, то 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.

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

3 голосов
/ 18 июля 2010

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

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

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

3 голосов
/ 18 июля 2010

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

if(strstr($string,$find)!==false){
    //true
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...