similar_text()将产品名称与给定字符串进行比较

时间:2015-11-30 16:51:50

标签: php arrays string

我目前正在尝试使用一些PHP来比较一组单词/短语和一个用户提供的单词,然后只返回具有最高百分比的单词。

到目前为止我的代码是(为了测试):

<?php

$CRProductName = strtoupper("Product 30");

$XProdNames = array("Product 1","Product 2", "Product 300", "Not a product");

echo "Checking product matches for: ".$CRProductName."<br /><br />";

foreach ($XProdNames as $ProductName) {
    similar_text($CRProductName,strtoupper($ProductName), $p);
    echo "Percentage:".$p."%<br />";

}

?>

这输出以下内容:

Checking product matches for: PRODUCT 30

Percentage:84.2105263158% 
Percentage:84.2105263158%
Percentage:95.2380952381% 
Percentage:60.8695652174%

哪个很棒且有效,但是我希望它能够返回结果中百分比最高的产品名称?

有人可以建议我选择好路线吗?

我尝试添加IF语句来检查$ p的值,但最高百分比可能每次都不同。

我将全部转换为大写只是为了确保它按内容标记相似性,而不是通过大小写。

谢谢,

2 个答案:

答案 0 :(得分:1)

<?php

$CRProductName = strtoupper("Product 30");

$XProdNames = array("Product 1","Product 2", "Product 300", "Not a product");

echo "Checking product matches for: ".$CRProductName."<br /><br />";

$bestMatch = array('score' => 0, 'name' => 'None');

foreach ($XProdNames as $ProductName) {
    $p = 0;
    similar_text($CRProductName,strtoupper($ProductName), $p);
    echo "Percentage:".$p."%<br />";

    if($p > $bestMatch['score'])
    {
        $bestMatch = array('score' => $p, 'name' => $ProductName);
    }

}

print_r($bestMatch);
?>

你总是可以在每个循环中运行simlar_text几次,并且如果你获得了助长效果,也可以平均结果。

答案 1 :(得分:0)

这非常简单。只需使用if语句检查foreach循环中的最高值。然后回显最高值。这是您的代码,稍作修改:

<?php

$CRProductName = strtoupper("Product 30");

$XProdNames = array("Product 1","Product 2", "Product 300", "Not a product");

echo "Checking product matches for: ".$CRProductName."<br /><br />";

$pHighest = 0;
foreach ($XProdNames as $ProductName) {
similar_text($CRProductName,strtoupper($ProductName), $p);
    if ($p > $pHighest) {
      $pHighest = $p;
    }
}
echo "Percentage:".$pHighest."%<br />";

?>