2010-07-18 67 views
5

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

<?php  

$string = "Stackoverflow"; 

$find = "overfl"; 

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

?> 

但是,这显然会工作不会,但是有一个函数,您可以部分搜索字符串?这将是巨大的:)

编辑:

如果它是一个数组?

如果我使用strpos,它会回显,如果我使用它,它会像truetruetruetruetrue。

回答

12

我倾向于使用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来查看总共有多少匹配。

​​

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

+0

好的,很好。但如果它是在一个数组中呢? (检查编辑后)。 – MacMac 2010-07-18 20:12:52

+0

你的意思是干草堆是一个数组?还是针?查看PHP文档 - 第一个注释是当前'接受$针数组的strpos' – JAL 2010-07-18 20:42:19

+0

本质上,您将不得不使用foreach遍历数组,无论它是哪一个。如果你有很多'针'和'干草堆',preg_match是一个可行的解决方案。 – JAL 2010-07-18 20:49:22

3

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

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

strpos()可以做到这一点。

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

请注意,它可能会返回0,所以请使用type-equals运算符。

+1

当测试是否存在时,应该使用严格比较false('!== false')。 – BoltClock 2010-07-18 19:51:22

+0

是的,我在编辑的时候给了downvote。给一个男人几秒钟,好吗? – 2010-07-18 19:52:41

+0

我认为downvoter在编辑之前投了票。它已被撤销,但显然。不,我不是那个低调的人:) – BoltClock 2010-07-18 19:53:20