php解析字符串并查看它们是否相似

php解析字符串并查看它们是否相似,php,string,parsing,function,matching,Php,String,Parsing,Function,Matching,我正在编写一个函数php,它必须执行以下操作: 我们有两个字符串,例如:“Bienvenue”和“Bienbenue” 这两个字符串与php函数strpos不匹配 但通常情况下,我函数的基本组成是说,是的,好的,两个字符串之间只有一个字母不同,所以我返回true。但是我需要一些帮助来找到一个算法或者一个php函数 在本例中:“Bienvenue”和“Vienlpntw” 只有“ien”与模式匹配,我必须看看匹配了多少个字母,然后将这个数字与单词/模式的大小进行比较 所以我们有9/3=

我正在编写一个函数php,它必须执行以下操作:

  • 我们有两个字符串,例如:“Bienvenue”和“Bienbenue

  • 这两个字符串与php函数strpos不匹配

  • 但通常情况下,我函数的基本组成是说,是的,好的,两个字符串之间只有一个字母不同,所以我返回true。但是我需要一些帮助来找到一个算法或者一个php函数

  • 在本例中:“Bienvenue”和“Vienlpntw

  • 只有“ien”与模式匹配,我必须看看匹配了多少个字母,然后将这个数字与单词/模式的大小进行比较

  • 所以我们有9/3=3;这个比率不好,所以我返回false

    但在这个例子中:“互动性”和“智能性”,我们有“智能”、“活动”和“智能性” 哪些是匹配的。13个字母中有11个是正确的。 所以要管理信件的错误并不容易


对于resume,我正在寻找一个php函数,它可以告诉我一个条目是否与我的模式匹配,返回关于这些点的true或false。

您可以使用内置函数来完成这一点。确保你也检查了一些“怪癖”


根据您的评论,您可能希望使用类似的方法,获取最长的公共子字符串,然后将其除以字符串长度,并给出一个阈值,根据该阈值返回true或false。您可以使用内置函数来完成此操作。确保你也检查了一些“怪癖”


根据您的评论,您可能希望使用类似的方法,获取最长的公共子字符串,然后将其除以字符串长度,并给出一个阈值,根据该阈值返回true或false

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;
}
函数精度匹配($string1,$string2,$precision=0.666){
$matchCount=0;
$string1Length=strlen($string1);
$string2Length=strlen($string2);
对于($i=0;$i<$string1Length;$i++){
如果($i<$string2Length&&$string1[$i]==$string2[$i]){
$matchCount++;
}
}
返回$matchCount/($string1Length==0?1:$string1Length)>$precision;
}

这里有一个非常简单的例子

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;
}
函数精度匹配($string1,$string2,$precision=0.666){
$matchCount=0;
$string1Length=strlen($string1);
$string2Length=strlen($string2);
对于($i=0;$i<$string1Length;$i++){
如果($i<$string2Length&&$string1[$i]==$string2[$i]){
$matchCount++;
}
}
返回$matchCount/($string1Length==0?1:$string1Length)>$precision;
}

这有什么用途?它闻起来有家庭作业的味道…家庭作业我不这么认为,它只是为了升级我网站的研究引擎。这有什么用途?它闻起来有家庭作业的味道…家庭作业我不这么认为,它只是为了升级我网站的研究引擎我不知道这个算法是如何工作的,但它不是我要找的。这个算法没有考虑字母在字符串中的位置。它不仅仅是看字母“a”是否包含在字符串“sallt”中,字母“a”必须是第一个字符串中的第二个字母,明白我的意思吗?@Necko这是一个意见问题,我想说
sault
ssalut
非常相似,但根据你的算法,它们并不相似。@jeroen是的,它们也很相似。因此,在这种情况下,函数必须返回true,因为:sallt包含在'sallt'中。我不知道这个算法是如何工作的,但这不是我要寻找的。这个算法没有考虑字母在字符串中的位置。它不仅仅是看字母“a”是否包含在字符串“sallt”中,字母“a”必须是第一个字符串中的第二个字母,明白我的意思吗?@Necko这是一个意见问题,我想说
sault
ssalut
非常相似,但根据你的算法,它们并不相似。@jeroen是的,它们也很相似。因此,在这种情况下,函数必须返回true,因为:sallt包含在'sallt'中