Chip komputerowy Olimpiada
informatyczna

Praca z tablicami na przykładzie rankingu bukmacherów

Data dodania: 19 grudnia, 2023 / Aktualizacja: 19 grudnia, 2023
Sortowanie bukmacherów w rankingu Źródło: Markus Spiske / Pexels

W tym tutorialu omówimy zaawansowany sposób sortowania tablic w języku PHP 8. O ile samo sortowanie sprowadza się do użycia jednej z predefiniowanych w PHP funkcji, o tyle w dzisiejszym materiale dodamy do tego średnią ważoną. A zatem – klawiatury w dłoń. Zaczynamy.

Założenia aplikacji

Skrypt napiszemy w jednym z najpopularniejszych języków programowania na świecie, czyli PHP. Posłużymy się do tego wersją oznaczoną numerem 8. Zatem, jeśli będziesz testował kod w starszych wersjach – jest możliwość, że będzie wyświetlał błędy. Mam tu na myśli sposób zapisywania tablic, który zobaczysz za chwilę.

Program ma za zadanie przyjąć tablicę z legalnymi bukmacherami, która zawiera informacje o każdym z nich. Są to: informacja o ocenie użytkowników serwisu (przyznawane gwiazdki), punkty za ofertę powitalną bukmachera, możliwość założenia konta tymczasowego oraz szerokość wyboru dyscyplin do obstawiania.

Każde kryterium jest oceniane w skali od 1 do 5. Natomiast, każde z kryteriów ma inną wagę. Oznacza to, że jedne kryteria są ważniejsze niż drugie. Dla przykładu, ogólna ocena użytkowników serwisu jest dużo ważniejsza niż mnogość wyboru dyscyplin.

Wagi poszczególnych kryteriów:

  • ocena użytkowników (przyznane gwiazdki): 50%
  • ocena oferty na start: 20%
  • ocena funkcjonalności konta tymczasowego: 15%
  • ocena wyboru dyscyplin: 15%

Na końcu działania skryptu oczekujemy tablicy z bukmacherami posortowanej od największej liczby punktów do najmniejszej liczby punktów.

Plan działania

  1. Pobranie tablicy z informacjami o bukmacherach z bazy danych.
  2. Napisanie funkcji, która obliczy punkty dla wybranego bukmachera, wraz z zastosowaniem odpowiednich wag dla kryteriów.
  3. Iteracja po tablicy z bukmacherami celem przyznania punktów i zapisanie ich w nowej tablicy celem sortowania.
  4. Sortowanie bukmacherów.
  5. Prezentacja wyników sortowania.

Do dzieła!

Tablica z bukmacherami

Tablica poniżej jest tablicą wielowymiarową, oznacza to, że elementami tablicy $bukmacherzy są kolejne tablice. W takiej formie otrzymujemy informacje z bazy danych. Jest widoczna nazwa bukmachera, a także oceny wybranych składników. W tablicy widzimy trzech bukmacherów. Ich kolejność jest losowa. Sortowanie wykonamy w kolejnych krokach.

$bukmacherzy = [
    "Fuksiarz" => [
        "ocena_uzytkownikow" => 4.89,
        "oferta_powitalna" => 5,
        "konto_tymczasowe" => 4,
        "wybor_dyscyplin" => 5
    ],

    "Betters" => [
        "ocena_uzytkownikow" => 4.82,
        "oferta_powitalna" => 4,
        "konto_tymczasowe" => 4,
        "wybor_dyscyplin" => 4
    ],

    "STS" => [
        "ocena_uzytkownikow" => 4.73,
        "oferta_powitalna" => 4,
        "konto_tymczasowe" => 5,
        "wybor_dyscyplin" => 4
    ]
];

Funkcja licząca ocenę

Poniżej widzisz zapis funkcji, która posłuży do wyliczenia ostatecznej oceny bukmachera. Tak, żeby poprawnie umiejscowić go w rankingu. Funkcja przyjmuje cztery parametry: ocenę, ocenę oferty, ocenę konta tymczasowego, a także ocenę mnogości dyscyplin. Oceny te generowane są na podstawie głosów użytkowników i redakcji. Z czego, głosy użytkowników mają największą wagę, bo aż 50% wszystkich punktów.

Żeby obliczyć wagi każdemu z kryteriów – należy pomnożyć jego wartość przez ilość procent, która stanowi założoną wagę tego kryterium. Im więcej procent – tym wyższa waga.

Dla przykładu: 50 / 100 jest odpowiednikiem 50%.

Funkcja zwraca nam liczbę przedstawiającą ostateczną ocenę danego bukmachera.

function ocena_bukmachera ($ocena_uzytkownikow, $oferta_powitalna, $konto_tymczasowe, $wybor_dyscyplin) {
    return
        $ocena_uzytkownikow * (50 / 100)
            + $oferta_powitalna * (20 / 100)
               + $konto_tymczasowe * (15 / 100)
                   + $wybor_dyscyplin * (15 / 100);
}

Wyliczanie ocen uczestnikom rankingu

W tym celu – tworzymy nową zmienną: $bukmacherzy_punkty. Będzie to tablica, która będzie przechowywała informacje o nazwie bukmachera i przypisanych mu punktach.

$bukmacherzy_punkty = [];
foreach ($bukmacherzy as $k=>$v) {
    $bukmacherzy_punkty[$k] = ocena_bukmachera(
        $v["ocena_uzytkownikow"],
        $v["oferta_powitalna"],
        $v["konto_tymczasowe"],
        $v["wybor_dyscyplin"]);
}

Czas na wypisanie zawartości tej tablicy, żeby zobaczyć z czym mamy do czynienia.

var_dump($bukmacherzy_punkty);
/*
array(3) {
    ["Fuksiarz"] => float(4.795)
    ["Betters"] => float(4.41)
    ["STS"] => float(4.515)
}
*/

Widzimy, że kolejność bukmacherów w rankingu nie uległa zmianie. Za to, widzimy, że zostały wyliczone dla każdego z nich wagi końcowe.

Sortowanie tablicy po wartości klucza

PHP oferuje wiele wbudowanych funkcji służących sortowaniu tablic. Najprostsza z nich to sort(). Jednak wykorzystanie jej w naszym przypadku na niewiele się zda, gdyż posortuje nam bukmacherów według kolejności alfabetycznej. A nie o to chodzi w rankingu.

W naszym przypadku wykorzystamy funkcję arsort(), która jest odmianą funkcji asort(). Różni je kierunek sortowania. Funkcja asort() – sortuje od najmniejszej wartości klucza do największej. My mamy za zadanie wykonać odwrotność tego. Dlatego też funkcja arsort() jest tym, czego szukamy.

To właśnie ona posortuje nam elementy tablicy z zachowaniem ich kluczy, w kierunku od największej liczby punktów do najmniejszej.

arsort($bukmacherzy_punkty);

Bukmacherskie podium

Sprawdźmy, co nam z tego wyszło. Poniżej widzimy przetasowanie w kolejności występowania bukmacherów. Na drugą pozycję wysunął się STS. Fuksiarz – bez zmian. Betters na miejscu trzecim.

var_dump($bukmacherzy_punkty);
/*
array(3) {
    ["Fuksiarz"] => float(4.795)
    ["STS"] => float(4.515)
    ["Betters"] => float(4.41)
}
*/

Podsumowanie

Po dzisiejszej lekcji wiesz już jak sortować tablice w języku PHP. Co więcej, wiesz nawet, jak dodać wagi do kryteriów, żeby uczynić to sortowanie przydatniejszym i bardziej zaawansowanym. Do celów tego ćwiczenia skorzystaliśmy z czegoś, co już istnieje, a mianowicie ranking polskich bukmacherów. Ranking jest prezentowany w ramach serwisu Obstawianie Meczy.

Ranking bukmacherów

Ocena artykułu
Oddaj głos, bądź pierwszy!