Praca z tablicami na przykładzie rankingu bukmacherów
Data dodania: 19 grudnia, 2023 / Aktualizacja: 24 lutego, 2025
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.
Czytaj także: Praca zespołowa w Agile/Scrum - Jak współpracować efektywnie?
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
- Pobranie tablicy z informacjami o bukmacherach z bazy danych.
- Napisanie funkcji, która obliczy punkty dla wybranego bukmachera, wraz z zastosowaniem odpowiednich wag dla kryteriów.
- Iteracja po tablicy z bukmacherami celem przyznania punktów i zapisanie ich w nowej tablicy celem sortowania.
- Sortowanie bukmacherów.
- 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)
}
*/
Czytaj także: Zarządzanie błędami w produkcji: Sentry, Rollbar i dobre praktyki
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.
