Sortowanie tablic z uwzględnieniem specyficznych potrzeb aplikacji – sortowanie fuzzy
Założenie: Naszym celem jest posortowanie tablicy wyników wyszukiwania, tak aby wyniki najbardziej zbliżone do zapytania użytkownika znajdowały się na górze listy. Użyjemy prostego algorytmu “fuzzy matching” do oceny podobieństwa.
Krok po kroku:
- Przygotowanie danych: Załóżmy, że mamy tablicę z wynikami wyszukiwania, gdzie każdy element jest tablicą asocjacyjną zawierającą tytuł i opis.
- Funkcja obliczająca podobieństwo: Stwórzmy funkcję, która obliczy podobieństwo między dwoma stringami (zapytaniem i tytułem) używając funkcji `similar_text`.
- Sortowanie tablicy: Użyjmy funkcji `usort` do posortowania tablicy `$wyniki` malejąco, na podstawie wartości zwracanej przez funkcję `obliczPodobienstwo`.
- Wyświetlenie wyników: Wyświetlamy posortowaną tablicę.
$wyniki = [
['tytul' => 'Programowanie w PHP', 'opis' => 'Kurs programowania w języku PHP.'],
['tytul' => 'PHP dla początkujących', 'opis' => 'Wprowadzenie do programowania w PHP.'],
['tytul' => 'Podstawy PHP', 'opis' => 'Nauka podstaw języka PHP.'],
['tytul' => 'Zaawansowane PHP', 'opis' => 'Zaawansowane techniki programowania w PHP.'],
['tytul' => 'PHP i bazy danych', 'opis' => 'Praca z bazami danych w PHP.'],
];
$zapytanie = 'programowanie php';
function obliczPodobienstwo($tekst1, $tekst2) {
similar_text($tekst1, $tekst2, $procent);
return $procent;
}
usort($wyniki, function($a, $b) use ($zapytanie) {
$podobienstwoA = obliczPodobienstwo(strtolower($zapytanie), strtolower($a['tytul']));
$podobienstwoB = obliczPodobienstwo(strtolower($zapytanie), strtolower($b['tytul']));
return $podobienstwoB - $podobienstwoA; // Sortowanie malejąco
});
foreach ($wyniki as $wynik) {
echo 'Tytuł: ' . $wynik['tytul'] . '
';
echo 'Opis: ' . $wynik['opis'] . '
';
}
Ten przykład pokazuje podstawy sortowania tablic w PHP z uwzględnieniem podobieństwa tekstowego. Zachęcamy do eksperymentowania z innymi algorytmami fuzzy matching i rozwijania tego przykładu!