【问题标题】:PHP - similar_text() function returns inaccurate results?PHP - similar_text() 函数返回不准确的结果?
【发布时间】:2010-11-05 14:49:04
【问题描述】:

我正在开发一个搜索引擎,为了过滤掉所有不好的结果,我将结果字符串与搜索查询进行比较,如果结果超过 30%,则返回。

我知道这行得通,我以前做过,很棒。但是,由于某些奇怪的原因,它现在似乎为我返回了一些非常奇怪的结果。我已经玩了一段时间了,我就是想不通!

while ($stmt->fetch()) {
 $tmp_procent = similar_text("banana", "banana");
 //if ($tmp_procent > 30) {
  $result[] = array('id' => $id,
        'category_id' => $category_id,
        'example' => html($example),
        'example_name' => html($example_name));
 //}
 $procent_arr[] = $tmp_procent;
}
return $procent_arr;

如您所见,我已将 IF 语句注释掉,所以现在它返回所有结果。但这并不是重点......正如你所看到的,我正在比较两个完全相同的字符串(香蕉),然后返回它们。

这是我打印出结果后得到的:

Array
(
    [0] => 5
    [1] => 5
    [2] => 5
)

呃,什么?这是不对的!所有结果不应该是 100 吗?

各位有什么想法吗?

谢谢!

哦,我在瑞典语中拼写了“procent”,所以它没有拼写错误,以防您注意到这一点。它返回 3 个结果的原因是因为它在数据库中找到了三个匹配项。

【问题讨论】:

  • 根据php.net/manual/en/function.similar-text.php,该函数应该产生两个字符串中匹配的字符数,并通过引用返回第三个参数中的百分比。但是,我仍然希望您的结果是带有6 而不是5 的数组。
  • 哦,天哪。我不知道为什么它返回 5 而不是 6,但它没有按预期工作的原因是因为我忘记添加最后一个参数。它现在就像一个魅力(几乎,我还有一些其他问题,但我会自己解决这些问题)。感谢您的提示!

标签: php function text


【解决方案1】:

很难理解你想做什么。

我想知道为什么它返回 5。'banana' 有 6 个字符。我想你写错了?

参考php documentation,语法为similar_text($str1, $str2, &$perc) 添加最后一个参数不会影响返回值。 'banana' 的返回值为 6。 $perc是什么,它是对函数核心中公式结果的引用

(similar_characters/average of characters*100)

在您的情况下,这就是 100 的值。

$procent_arr = []; // Good practice to define your array out of the loop
while ($stmt->fetch()) {
    $tmp_procent = similar_text('banana', 'banana', $procent);
    if ($tmp_procent > 30) {
        $result[] = [
            'id' => $id,
            'category_id' => $category_id,
            'example' => html($example),
            'example_name' => html($example_name)
        ];
    }
    $procent_arr [] = $procent;
}
return $procent_arr;

返回值是:

[0]=>100
[1]=>100
[2]=>100

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2018-01-07
    相关资源
    最近更新 更多