php strpos и примерное совпадение с разницей в 1 символ
Я искал систему, но не мог найти никакой помощи, которую я мог понять в этом, так что здесь...
Мне нужно найти приблизительное соответствие для строки в php.
По сути, я проверяю, что все $ 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"
и так далее...
2 ответа
Примечание: это будет прекрасно работать, когда есть разница 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";
}
}