0

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

我需要在 php.ini 中找到一个字符串的近似匹配。

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

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

它工作正常。但是,我有一个$cv = "marie_claire"和一个$name = "clare" 的情况,它们设置了标志(当然),但我希望 strpos 能够“找到”它。

是否可以进行近似匹配,以便如果字符串中的任何位置有 1 个额外的字母,它会匹配?例如这样:

$name = "clare" 在 $cv = "marie_claire" 中找到

$name = "caire" 在 $cv = "marie_claire" 中找到

$name = "laire" 在 $cv = "marie_claire" 中找到

等等...

4

2 回答 2

0

试试这个,不考虑性能,但会适合你的情况。你可以玩你想接受的不同字符偏差的数量。

$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";
    }
}
于 2017-04-17T14:56:14.217 回答
0

注意:1如上所述,当存在字符差异时,这将非常有效。

在此处尝试此代码段

<?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;
    }
}
于 2017-04-18T16:43:52.200 回答