2011-12-05 44 views
1

以下代码获取每个帖子的TITLE属性。我想用类似于LIKE与SQL一起使用的方式将它与搜索短语$ f进行比较。PHP搜索系统 - 如何使用LIKE

<?php 

$terms = $_GET['f']; 

$searchs = get_posts($args); 

foreach($searchs as $search){ 

    $title = get_the_title($search); 

然后我们就需要这样的东西

if($title is LIKE $f) { } 

它会如何运作?

+1

你是什么意思“喜欢”?如何获取'posts'内的帖子?如果您需要过滤大量数据,那么在数据库查询中执行该操作要比在PHP脚本内执行更有效。 – jsalonen

+1

这是[MySQL的东西](http://www.mysqltutorial.org/sql-like-mysql.aspx)。 – Blender

+0

这看起来不是一个明智的想法,因为您可能会为获取所有帖子付出代价。你有数据库吗? – ajreal

回答

0

喜欢的是一个MySQL的关键字,你必须使用,在一个SQL语句,像这样:如果你想要做你的搜索使用PHP

SELECT * FROM posts WHERE title LIKE '%keyword%'; 

,您可以用strpos像这样:

if(strpos($title, $keyword) !== FALSE) { } 
0

您需要查询MySQL或PostgreSQL full text searchLIKE如果您计划进行“模糊”搜索或需要比简单字符串比较更多的功能,则不是您想要的。

1

从你说这个的方式来看,我认为它不能在数据库中用实际的LIKE或全文搜索来完成。我认为你可能要做的是正则表达式,它比SQL“LIKE”运算符提供的模式匹配稍微先进一些,但可以用于相同的目的。

PHP集成了“Perl Compatible Regular Expressions”库。看看这里:http://uk.php.net/manual/en/book.pcre.php或在线查找标准正则表达式语法的介绍。

作为一个简单的例子,你可能会想这样做:

// Compose your matching pattern 
// Be sure to escape user-supplied parts 
// ".*" is roughly equivalent to "%" in LIKE 
// the "/i" modifier means "case insensitive" 
$pattern = '/.*' . preg_quote($_GET['f']) . '.*/i'; 

$searches = get_posts($args); 

foreach($searches as $search) 
{ 
    $title = get_the_title($search); 

    if (preg_match($pattern, $title)) 
    { 
     # FOUND A MATCH! 
    } 
}