Возможный дубликат:
Строковое сходство в PHP: функция типа levenshtein для длинных строк
У меня есть строка темы
$subj = "Director, My Company";
и список нескольких строк для сравнения:
$str1 = "Foo bar";
$str2 = "Lorem Ipsum";
$str3 = "Director";
Здесь я хочу найти ближайшую строку, связанную с $subj
. Можно ли это сделать?
Функция leventhstein()
будет делать то, что вы ожидаете. Алгоритм leventstein вычисляет количество операций вставки и замены, которые требуются для преобразования некоторой строки в другую. Результат leventhstein называется a distance
. Расстояние можно использовать для сравнения строк по вашему запросу.
Этот пример получен из документации функции PHP leventhstein()
.
<?php $input = 'Director, My Company'; // array of words to check against $words = array('Foo bar','Lorem Ispum','Director'); // no shortest distance found, yet $shortest = -1; // loop through words to find the closest foreach ($words as $word) { // calculate the distance between the input word, // and the current word $lev = levenshtein($input, $word); // check for an exact match if ($lev == 0) { // closest word is this one (exact match) $closest = $word; $shortest = 0; // break out of the loop; we've found an exact match break; } // if this distance is less than the next found shortest // distance, OR if a next shortest word has not yet been found if ($lev <= $shortest || $shortest < 0) { // set the closest match, and shortest distance $closest = $word; $shortest = $lev; } } echo "Input word: $input\n"; if ($shortest == 0) { echo "Exact match found: $closest\n"; } else { echo "Did you mean: $closest?\n"; }
Вывод скриптов
Input word: Director, My Company Did you mean: Director?
Удачи!
Вы можете использовать http://php.net/manual/en/function.levenshtein.php для определения расстояния между двумя строками.
$subj = "Director, My Company"; $str = array(); $str[] = "Foo bar"; $str[] = "Lorem Ipsum"; $str[] = "Director"; $minStr = ""; $minDis = PHP_INT_MAX; for ($str as $curStr) { $dis = levenshtein($subj, $curStr); if ($dis < $minDis) { $minDis = $dis; $minStr = $curStr; } } echo($minStr);