我倾向于使用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
或1警告: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来查看总共有多少匹配。
因此,搜索项是一个正则表达式。 ()
将术语组合在一起,|
表示'或'。 #
表示模式的开始和结束。正则表达式可以很快变得相当复杂,但当然,它们工作正常!出于性能原因,通常会避免它们,但是如果您正在测试多个字符串,则可能比上述的数组循环方法更有效。我相信还有其他方法可以做到这一点。
来源
2010-07-18 19:51:27
JAL
好的,很好。但如果它是在一个数组中呢? (检查编辑后)。 – MacMac 2010-07-18 20:12:52
你的意思是干草堆是一个数组?还是针?查看PHP文档 - 第一个注释是当前'接受$针数组的strpos' – JAL 2010-07-18 20:42:19
本质上,您将不得不使用foreach遍历数组,无论它是哪一个。如果你有很多'针'和'干草堆',preg_match是一个可行的解决方案。 – JAL 2010-07-18 20:49:22