将一个字符串与从mysql数据库中获取的其他字符串匹配

时间:2015-09-19 04:04:24

标签: php mysql compare match

我们正在尝试将一个字符串与另一个字符串匹配(即多个字符串),这是从mysql数据库中获取的。

<?php
$verdeel = explode(" ",strtolower('sony xperia c3 black'));

$getallen =explode(" ",strtolower('Sony Xperia c3 dual sim'));

if(array_intersect($verdeel, $getallen))
{

for($i=0;$i < count($verdeel);$i++){

    if($verdeel[$i] == $getallen[$i]){
        echo $getallen[$i];
    } else {
        echo "no match";    
    }
  }
}
?>

在上面的例子中,我们匹配“sony xperia c3 black”,它是输入字符串匹配的第二个字符串“Sony Xperia c3 dual sim”。 第二个字符串可能不止一个 例如“Sony Xperia c3双卡双待”, “索尼Xperia c3双卡黑色1GB内存”, “索尼Xperia c3黑色1GB内存”......等等。

在上面的代码中,如果我们找到任何匹配关键字,那么输出就是该关键字。 到目前为止,我们是正确的,但不是给出匹配关键字,而是需要从数据库(一个或多个)获取的整个字符串找到MAXIMUM MATCHED KEYWORD STRING(即具有最大匹配关键字的产品名称列表在顶部,如降序比较产品是我们的主要内容).... 当我们从数据库中选择一个产品名称时,是比较产品的正确方法。或者你有不同的想法来比较产品的价格。 Plz建议我正确的方式。 谢谢你的合作。

1 个答案:

答案 0 :(得分:0)

我建议你这样做一个SQL查询:

SELECT * FROM products 
WHERE LOWER(title) LIKE '%sony%'
or LOWER(title) LIKE '%xperia%'
or LOWER(title) LIKE '%black%'

通过这种方式,您只需从数据库中检索与“sony xperia c3 black”有任何相似性的记录

你可以通过编程方式在PHP中进行这样的查询:

$query = 'SELECT * FROM products WHERE ';
$keywords = explode(" ",strtolower('sony xperia c3 black'));
foreach($keywords as $key => $keyword){
    if($key == 0)
        $query .='LOWER(title) LIKE %'.$keyword.'%';
    else
        $query .='or LOWER(title) LIKE %'.$keyword.'%';
}

现在假设我们运行查询,并且我们在数组中有类似的产品标题,我们想要对它们进行排序。 我们可以这样做:

//$titles is an array containing similar products title
//$keywords is the array we made above by exploding input string
foreach($titles as $key => $title){
   $title = strtolower($title);
   $title = explode(' ',$title);
   $matched[$key] = sizeof(array_intersect($keywords,$title));
}
array_multisort($matched, $titles);

在$ titles中的这些值根据它们与输入字符串

的相似性进行排序

array_intersect

array_multisort