如何在键入(不使用MySQL)时搜索部分字符串,例如MySQL中的LIKE函数,但在搜索字符串时使用PHP,例如
<?php
$string = "Stackoverflow";
$find = "overfl";
if($find == $string)
{
return true;
}
else
{
return false
}
?>
但显然工作不会,但有没有一个功能,你可以搜索部分字符串?那会很棒:)。
修改
如果它在数组中会怎样?
如果我使用strpos,它会做回声,如果我使用它,它就像truetruetruetruetrue。
答案 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)