Я искал систему, но не смог найти никакой помощи, которую я мог бы понять в этом, так что здесь …
Мне нужно найти приблизительное соответствие для строки в PHP.
По сути, я проверяю, что все $ names находятся в строке $ cv, и если нет, устанавливает флаг в true.
foreach( $names as $name ) {
if ( strrpos( $cv, $name ) === false ) {
$nonameincv = true;
}
}
Работает нормально. Тем не менее, у меня был случай $ cv = «marie_claire» и $ name = «Клэр» который устанавливает флаг (конечно), но который мне бы хотелось, чтобы strpos «нашел» как бы.
Можно ли выполнить приблизительное совпадение, чтобы, если в строке была 1 лишняя буква, она соответствовала? Например, чтобы:
$ name = «clare» находится в $ cv = «marie_claire»
$ name = «caire» находится в $ cv = «marie_claire»
$ name = «laire» находится в $ cv = «marie_claire»
и так далее…
Замечания: Это будет прекрасно работать, когда есть разница 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;
}
}
Попробуйте это, не учитывая производительность, но это сработает для вашего случая. Вы можете поиграть с тем количеством отклонений символов, которое хотите принять.
$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";
}
}