我们正在尝试将一个字符串与另一个字符串匹配(即多个字符串),这是从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建议我正确的方式。 谢谢你的合作。
答案 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中的这些值根据它们与输入字符串
的相似性进行排序