Ja bym nie ufał przedziałom górnym. Kulczycki ma rację co do pewnego małego babola u Ciebie Crozin. Nie reagujesz na przekroczenie zakresu maksymalnego w ostatnim wypadku dla weterana. Gdy ktoś przekroczy 20000 - nie pokaże nic.
if($wartosc >= 0) {
if( $wartosc > 3999 ) {
if( $wartosc > 7999 ) {
if( $wartosc > 7999 ) {
if( $wartosc > 11999 ) {
$ranga = 'Weteran';
} else {
$ranga = 'Doświadczony';
}
} else {
$ranga = 'Doświadczony';
}
} else {
$ranga = 'Młodzian';
}
} else {
$ranga = 'Początkujący';
}
} else {
$ranga = 'Cheater'; //jeśli wrzucasz kogoś na minus to na bank coś przeskrobał :)
}
Tu masz wersję zagnieżdżona dla rang. Nie jest ładna, ale zadziała jak trzeba. Jeśli chcesz, by funkcja była dynamicznie modyfikowalna (co jakiś czas zmieniasz nazwy rang lub wartości) to stwórz funkcję, gdzie jako parametr przekazujesz tablicę z zakresami dolnymi jako klucze

Przykład masz tutaj mniej więcej...
<?php
$tabela_zakresow = array( 0 => 'Początkujący',
12000 => 'Weteran',
4000 => 'Doświadczony',
8000 => 'Młodzian'
);
//ważne są klucze i nazwy. Nie muszą być po kolei.
function ranga( $staty, $rangi ) {
//sprawdzam czy mi podano tablicę rang. Jeśli nie - rzucam false, ale można też tutaj sypnąć wyjątkiem, jak kto woli.
return false;
}
//tu sprawdzam czy mi podano liczbę postów/artykułów/czegoś usera, tu też może być wyjątek.
return false;
}
//sortowanie kluczy! dzięki temu nie muszę ich podawać w tablicy po kolei :) Te sortowanie załatwia mi ów problem
ksort( $rangi, SORT_NUMERIC
); //magia
if( $key > $staty ) {
} else {
}
}
return 'Cheater!';// To jeśli w tablicy brak rangi, a więc poniżej progu najniższego
}
echo ranga
( 'test', $tabela_zakresow ).'<br />';//powinno zwrócić pustkę lub false jeśli zrobisz var_dump( ranga( 'test', $tabela_zakresow ) ) :) echo ranga
( -666
, $tabela_zakresow ).'<br />'; echo ranga
( 10000
, $tabela_zakresow ).'<br />'; echo ranga
( 4000
, $tabela_zakresow ).'<br />'; echo ranga
( 20000
, $tabela_zakresow ).'<br />'; echo ranga
( 500
, $tabela_zakresow ).'<br />'; ?>
Oczywiście "magia" to żart. Posortowaną tablicę przeszukuję od końca tak długo, aż nie dojdę do początku. Gdy jestem w pętli to porównuję wartość liczbową podaną w funkcji do aktualnego progu i jeśli klucz jest większy to lecę do elementu wcześniej w tablicy. Jeśli nie jest to prawda, to znaczy, że wpadłem we właściwy zakres i zwracam wartość dla tego klucza. Jeśli dojdę do końca i nie znajdę pasującego to wywalam rangę domyślną dla oszusta

Zwracaj uwagę na to co zwraca funkcja ranga. jeśli dała w wyniku false to sygnalizuj błąd. Uważaj na 0... Jeśli zrobisz głupie
if( ranga(0, $tabela) ) {
} else {
else 'error';
}
to wywali Ci error jeśli będziesz zwracał jako nazwę 0, '0' lub cokolwiek innego dające się do false przekonwertować w locie. Powinno być:
if( ranga(0, $tabela) !== false ) {
} else {
else 'error';
}
Do latania po pętli mogłem też użyć foreach, co jest wygodne przy małych petlach. Ale tutaj dla celów edukacyjnych użyłem while, byś wiedział, że tak też można, a dodatkowo przy ogromnych pętlach while jest wydajniejsze. Tutaj to tylko sztuka dla sztuki i ukazanie że można. Równie dobrze możesz to foreach zastąpić, bo wątpliwe byś miał kiedykolwiek więcej niż kilka tysięcy rang

Dodatkowo jeśli masz pewność, że klucze są już podane w odpowiedniej kolejności od najmniejszej do największej to możesz usunąć z wnętrza ksort, który spowalnia całość.