search — php strpos и примерное совпадение с разницей в 1 символ

Я искал систему, но не смог найти никакой помощи, которую я мог бы понять в этом, так что здесь …

Мне нужно найти приблизительное соответствие для строки в 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»

и так далее…

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

По вопросам рекламы [email protected]