2012-04-20 21 views
1

我需要一些幫助,因爲我寫一個函數Php這也在做這樣的事情:PHP解析字符串,看看他們是否similiars

  • 我們必須爲字符串,例如:「Bienvenue」和「Bienbenue
  • 這兩個字符串與php函數strpos不匹配。
  • 但是通常情況下,我的函數的基本比例是說,是的,這兩個字符串之間只有一個字母不同,所以我返回true。但我需要一些幫助找到一個算法或PHP函數存在?

  • 在這個例子:「Bienvenue」和「Vienlpntw

  • 有隻是「IEN」匹配的模式這,我有看到多少個字母都匹配,之後,comparate這數字與單詞/模式的大小。
  • 所以我們有9/3 = 3;這個比例是不好的,所以我回復錯誤。

    但在這個例子: 「互動」 和 「intevactizity」,我們有 「INTE」 「ACTI」 和 「兩者均」 這是匹配的。所以我們有13個字母中有11個是更正的。 所以它不容易管理的字母錯誤...

對於簡歷,我要尋找一個PHP函數,可以告訴我,如果一個條目可以用我的模式相匹配與否,返回true或false尊這些點。

+0

這是什麼應用?它的功課氣味... – 2012-04-20 17:56:06

+0

作業我不這麼認爲,它只是爲了升級我的研究引擎我的網站 – Necko 2012-04-20 17:56:55

回答

4

您可以使用內置函數similar_text來完成此操作。確保你看看notes以及一些'怪癖'。

根據您的意見,您可能想使用類似this,它得到的最長公共子串,然後用字符串長度除以它,並給它由一個閾值來返回true或false

+0

我不知道如何使用這種算法,但它不是我所期待的。該算法沒有考慮字符串中字母的位置 – Necko 2012-04-20 18:13:04

+0

這不僅僅是看看例如字符串'salut'中包含字母'a',字母'a'必須是字母'a'中的第二個字母第一個字符串,你明白我的意思了嗎? – Necko 2012-04-20 18:14:43

+0

@Necko這是一個意見問題,我會說'salut'和'ssalut'非常相似,但根據你的算法,他們不是。 – jeroen 2012-04-20 18:17:15

1

這裏很簡單的例子

function precisionMatch($string1, $string2, $precision = 0.6666666) { 

    $matchCount = 0; 
    $string1Length = strlen($string1); 
    $string2Length = strlen($string2); 
    for($i = 0; $i < $string1Length; $i++) { 

     if ($i < $string2Length && $string1[$i] == $string2[$i]) { 

      $matchCount++; 
     } 
    } 

    return $matchCount/($string1Length == 0 ? 1 : $string1Length) > $precision; 
} 
相關問題