Учтите следующее. У меня очень большой массив со всеми названиями дорог в данной стране, упорядоченный по длине строки, например:
$roadNames = ['Ivy Lane','East Road','The Maltings','Greenhill Road', 'Woodlands Close']; //And many, many more
Теперь я хочу найти точное совпадение в длинной строке
$string = "
..... ALOT OF TEXT .....
..... ALOT OF TEXT .....
You can find us at: Greenhill Road 1, 11111, The City
..... ALOT OF TEXT .....
..... ALOT OF TEXT .....
";
Найти точное совпадение довольно просто, я просто делаю следующее:
foreach ($roadNames as $roadName) {
if(stripos($string, $roadName) !== false){
echo 'Exact match: '.$roadName;
break;
}
}
Но что, если название дороги написано с ошибкой в одной букве, fx. лишний пробел / пробел отсутствует, буква меньше / больше, или 1 буква неверна. Fx. «Гринхил-роуд», «Гринхилл-роуд», «Гринхилл-роад», «Грин-хилл-роуд», «Кринхилл-роуд»? Как теперь я могу найти наилучшее совпадение всех моих названий дорог в массиве, если имя дороги в $ string было одним из примеров? Есть ли математический способ сделать это? Или, может быть, я могу купить регулярное выражение?
Я думаю, что-то вроде этого, хотя это кажется излишним (и не работает)
<code>foreach ($roadNames as $roadName) {
if (stripos($string, $roadName)) {
echo 'Exact match: ' . $roadName;
break;
} else {
$alphabet = range('a', 'z');
$alphabet[] = ' ';
$roadName_split = str_split($roadName);
$test_array = array();
foreach ($roadName_split as $strpos => $letter) {
foreach ($alphabet as $letter_in_alphabet) {
$test_array[] = $letter_in_alphabet;
}
foreach ($test_array as $key => $value) {
$test_array[$key] .= substr($roadName, $strpos, 1);
}
}
echo '<pre>';
print_r($test_array);
echo '
'; умереть; foreach ($ test_array as $ misplled_value) {if (stripos ($ string, $ misplled_value)) {echo 'найдено близкое соответствие:'. $ RoadName; перемена; }} // ИЛИ Что-то вроде регулярного выражения, не знаю, как это должно быть // $ roadName_split = str_split ($ roadName); // $ re = ''; // foreach ($ roadName_split as $ strpos => $ letter) {// $ re. = "$ letter?"; //}}}