【问题标题】:php strpos and approximate match with 1 character differencephp strpos和近似匹配,相差1个字符
【发布时间】:2017-09-13 04:28:11
【问题描述】:

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

我需要在 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" 中找到

等等……

【问题讨论】:

标签: php search strpos string-search approximate


【解决方案1】:

注意: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;
    }
}

【讨论】:

  • 太棒了-谢谢。我花了一些时间来适应我的代码,但最终还是让它工作了。干杯。
  • @arathra welcomee... :) 即使我真的很喜欢你的问题。
【解决方案2】:

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

$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";
    }
}

【讨论】:

  • 谢谢;这里的问题是必须找到 $names 数组的所有可能变量; @sahil 的代码就是这样做的。
猜你喜欢
  • 2011-05-11
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
  • 2010-09-08
  • 2016-03-28
  • 2013-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多