2016-05-31 19 views
5

Zastanawiam się tylko, co się tutaj dzieje. Jeśli używam to:similar_text nie daje oczekiwanego wyniku

var_dump(similar_text('abcd', 'abcdefg', $percent)); //output: int 4 

Thats ok, abcd w odpowiednim miejscu, tak 4 jest dobrym wynikiem. Zmiana

Miejmy a i b na początku pierwszego variabl:

var_dump(similar_text('bacd', 'abcdefg', $percent)); //output: int 3 

I excpected do 2 lub 4 ale nie 3. Czy ktoś może mi wytłumaczyć, dlaczego tak jest?

+0

Jego podobieństwo w procentach, a nie liczba znaków to dopasowane – Thamilan

+0

nie, odsetek będzie w '$ percent' zmiennej, co Nie używałem tutaj. – vaso123

+2

Jest trochę dyskusji na ten temat: http://stackoverflow.com/questions/14136349/how-does-similar-text-work. Krótko mówiąc, prawdopodobnie nie robi to, co myślisz, że jest. – iainn

Odpowiedz

3

similar_text() używa algorytmu, który pobiera pierwszą literę w pierwszym ciągu, który zawiera drugi ciąg, liczy i odrzuca znaki przed tym drugim ciągiem. To jest powód, dla którego uzyskujemy różne wyniki.

iteracji dla pierwszego przykładu

'abcd' vs 'abcdefg' - (1) // 'a' match with 'a' 
    'bcd' vs 'bcdefg' - (1) // 'b' match with 'b' 
    'cd' vs 'cdefg' - (1) // 'c' match with 'c' 
    'd' vs 'defg' - (1) // 'd' match with 'd' 
    ''  vs 'efg'  - (0) // no match 
    Result = 4 

iteracji dla drugiego przykładu

'bacd' vs 'abcdefg' - (0) // b not match a 
    'bacd' vs 'bcdefg' - (1) // b match b 
    'acd' vs 'cdefg' - (0) // a not match c 
    'cd' vs 'cdefg' - (1) // c match c 
    'd' vs 'defg'  - (1) // d match d 
    ''  vs 'efg'  - (0) // not match with any elemennt 
    Result = 3 
+0

Zamierzam zrobić ten post, ja też to myślę. –

+0

Myślę, że to jest powód, co myślisz? – Shin

+0

czy możesz mi wyjaśnić, dlaczego ''cd' kontra 'cdefg' - (0)' podczas gdy w pierwszej iteracji jest 1, i dlaczego ''' vs 'efg'' jest 1 w drugim, a 0 w pierwszy? I dlaczego "bacd" vs "abcdefg" - (1) "w drugim? – vaso123

Powiązane problemy