搜索部分字符串PHP

时间:2010-07-18 19:46:40

标签: php search

如何在键入(不使用MySQL)时搜索部分字符串,例如MySQL中的LIKE函数,但在搜索字符串时使用PHP,例如

<?php    

$string = "Stackoverflow";

$find = "overfl";

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

?>

但显然工作不会,但有没有一个功能,你可以搜索部分字符串?那会很棒:)。

修改

如果它在数组中会怎样?

如果我使用strpos,它会做回声,如果我使用它,它就像truetruetruetruetrue。

3 个答案:

答案 0 :(得分:13)

我倾向于使用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.

在此,搜索词是正则表达式。 ()将条款组合在一起,|表示'或'。 #表示模式的开始和结束。正则表达式可以很快变得复杂,但当然,它们可以工作!出于性能原因,通常会避免使用它们,但如果您正在测试多个字符串,则这可能比上述数组循环方法更有效。我确信还有其他方法可以做到这一点。

答案 1 :(得分:3)

strstr()/ stristr()(后者不区分大小写)

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

答案 2 :(得分:3)

strpos()可以做到这一点。

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

请注意,它可能返回0,因此请使用type-equals运算符。