我目前正在尝试使用一些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的值,但最高百分比可能每次都不同。
我将全部转换为大写只是为了确保它按内容标记相似性,而不是通过大小写。
谢谢,
答案 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 />";
?>