php strpos 和近似匹配相差 1 个字符

php strpos and approximate match with 1 character difference

我搜索了系统,但找不到任何我能理解的帮助,所以这里...

我需要为 php 中的字符串找到近似匹配项。

本质上,我是在检查所有 $names 是否都在 $cv 字符串中,如果不是,它会将标志设置为 true。

foreach( $names as $name ) {
    if ( strrpos( $cv, $name ) === false ) {
        $nonameincv = true;
    }
}

它工作正常。但是,我有一个 $cv = "marie_claire" 和一个 $name = "clare" 设置标志的情况(当然),但我希望 strpos 具有 "found" 原样。

是否可以做一个近似匹配,如果一个字符串中的任何地方有 1 个额外的字母,它就会匹配?例如:

$name = "clare" is found in $cv = "marie_claire"

$name = "caire" is found in $cv = "marie_claire"

$name = "laire" is found in $cv = "marie_claire"

等等...

试试这个,不考虑性能,但对你有用 case.You 可以玩你想要接受的不同字符偏差的数量。

$names = array("clare", "caire", "laire");
$cv = "marie_claire";

foreach( $names as $name ) {
    $sname = str_split($name);
    $words = explode('_', $cv);
    foreach($words as $word) {
        $sword = str_split($word);
        $result = array_diff($sword, $sname);
        if(count($result) < 2)
            echo $name. ":true\r\n";
    }
}

注意: 当存在 1 字符差异时,这将完全正常工作,如上文所述。

Try this code snippet here

<?php
ini_set('display_errors', 1);
$stringToSearch="mare";
$wholeString = "marie_claire";

$wholeStringArray=  str_split($wholeString);
for($x=0;$x<strlen($wholeString);$x++)
{
    $tempArray=$wholeStringArray;
    unset($tempArray[$x]);
    if(strpos(implode("", $tempArray),  $stringToSearch)!==false)
    {
        echo "Found: $stringToSearch in ".implode("", $wholeStringArray);
        break;
    }
}