Questa potrebbe essere una soluzione rapida utilizzando http://php.net/manual/en/function.similar-text.php:
Questo calcola la similitudine tra due stringhe come descritto nel Classics Programmazione: Implementazione migliori algoritmi del mondo da Oliver (ISBN 0-131-00413-1) . Si noti che questa implementazione non utilizza una pila come nel pseudo codice di Oliver, ma chiamate ricorsive che possono o meno velocizzare l'intero processo. Si noti inoltre che la complessità di questo algoritmo è O (N ** 3) dove N è la lunghezza della stringa più lunga.
$userInput = 'Bradley123';
$list = array('Bob', 'Brad', 'Britney');
usort($list, function ($a, $b) use ($userInput) {
similar_text($userInput, $a, $percentA);
similar_text($userInput, $b, $percentB);
return $percentA === $percentB ? 0 : ($percentA > $percentB ? -1 : 1);
});
var_dump($list); //output: array("Brad", "Britney", "Bob");
O utilizzando http://php.net/manual/en/function.levenshtein.php:
La distanza Levenshtein è definito come il numero minimo di caratteri si deve sostituire, inserire o cancellare per trasformare str1 in str2. La complessità dell'algoritmo è O (m * n), dove n e m sono la lunghezza di str1 e str2 (piuttosto buona se confrontata con similar_text(), che è O (max (n, m) ** 3), ma ancora costoso).
$userInput = 'Bradley123';
$list = array('Bob', 'Brad', 'Britney');
usort($list, function ($a, $b) use ($userInput) {
$levA = levenshtein($userInput, $a);
$levB = levenshtein($userInput, $b);
return $levA === $levB ? 0 : ($levA > $levB ? 1 : -1);
});
var_dump($list); //output: array("Britney", "Brad", "Bob");
si vuol dire organizzare l'array in un ordine specifico sulla base di un valore di ingresso immesso dall'utente? – Drewdin
Dai un'occhiata a [soundex] (http://php.net/manual/de/function.soundex.php) e [metaphone] (http://php.net/metaphone). Sono due modi comuni in PHP per calcolare la differenza tra due parole. Ma al momento non ho idea di come ordinarli secondo una metrica significativa. Potresti spiegare un po 'di più il tuo ordinamento? –