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
字符差异时,这将完全正常工作,如上文所述。
<?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;
}
}
我搜索了系统,但找不到任何我能理解的帮助,所以这里...
我需要为 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
字符差异时,这将完全正常工作,如上文所述。
<?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;
}
}