Функции за низове
PHP Manual

levenshtein

(PHP 4 >= 4.0.1, PHP 5)

levenshteinИзчислява Левенщайн разстояние между два низа

Описание

int levenshtein ( string $str1 , string $str2 )
int levenshtein ( string $str1 , string $str2 , int $cost_ins , int $cost_rep , int $cost_del )

Левенщайн разстояние представлява минималния брой знаци, който трябва да замените, вмъкнете или изтриете, за да преобразувате str1 в str2 . Алгоритъмът е със сложност O(m*n), където n и m са дължините на str1 и str2 (по-точно в сравнение с similar_text(), която е със сложност O(max(n,m)**3), а консумира повече ресурси).

В най-простият си вид, функцията ще приеме само двата низа като параметри и ще изчисли просто броя на операциите за вмъкване, замяна или изтриване необходими за преобразуването на str1 в str2 .

При вторият вариант може да приеме 3 допълнителни параметъра, които дефинират стойността на операциите за вмъкване, замяна или изтриване. Този вариант обхваща по-общите случаи и е по-адаптивен от предния вариант, въпреки че не е толкова ефективен.

Параметри

str1

Един от низовете, който се използва за изчисляване на Левенщайн разстояние.

str2

Един от низовете, който се използва за изчисляване на Левенщайн разстояние.

cost_ins

Дефинира стойността на вмъкването.

cost_rep

Дефинира стойността на замяната.

cost_del

Дефинира стойността на изтриването.

Връщани стойности

Тази функция връща Левенщайн разстояние между двата низови аргумента или -1, ако един от низовите аргументи е с дължина над допустимите 255 знака.

Примери

Example #1 Пример за levenshtein()

<?php
// въвеждане на сгрешена дума
$input 'carrrot';

// масив от думи, за които да се направи проверката
$words  = array('apple','pineapple','banana','orange',
                
'radish','carrot','pea','bean','potato');

// все още не е намерено най-краткото разстояние
$shortest = -1;

// итериране с думите за да се намери най-близката
foreach ($words as $word) {

    
// изчисляване на разстоянието между 
    // изходната и текущата дума
    
$lev levenshtein($input$word);

    
// проверка за пълно съвпадение
    
if ($lev == 0) {

        
// най-близката дума е тази (пълно съвпадение)
        
$closest $word;
        
$shortest 0;

        
// изход от цикъла; намерено е точно съвпадение
        
break;
    }

    
// ако разстоянието е по-малко от следващото най-близко разстояние
    // ИЛИ ако следващата най-близка дума все още не е открита
    
if ($lev <= $shortest || $shortest 0) {
        
// установяване на най-близкото съвпадение и най-близкото разстояние
        
$closest  $word;
        
$shortest $lev;
    }
}

echo 
"Изходна дума: $input\n";
if (
$shortest == 0) {
    echo 
"Точно съвпадение: $closest\n";
} else {
    echo 
"Имате предвид: $closest?\n";
}

?>

Примерът по-горе ще изведе:

Изходна дума: carrrot
Имате предвид: carrot?

Вж. също


Функции за низове
PHP Manual