Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]If, switch czy tablica? Co najlepsze?
Forum PHP.pl > Forum > Przedszkole
-Pytalski-
Hej.

W bazie mam pola np. plec, ranga, status o wartościach liczbowych.

0 - mężczyzna
1 - kobieta

0 - użytkownik
1 - moderator
2 - vip
3 - admin

0 - online
1 - offline

I mam pytanie, co lepiej zastosować, gdy chce to wyświetlić?

a.) if?
  1.  
  2. if($user['plec'] == 0){
  3. echo 'Mężczyzna';
  4. }
  5. else{
  6. echo 'Kobieta';
  7. }


b.) switch?
  1. switch($user['plec']){
  2. case 0: echo 'Mężczyzna';
  3. break;
  4. default: echo 'Kobieta';
  5. break;
  6. }


c.) tablice?
  1.  
  2. $plec = array('Mężczyzna', 'Kobieta');
  3.  
  4. echo $plec[$user['plec']];




Tablice są dla mnie najwygodniejsze, ale jeśli jest to mało optymalne to podziękuje.

Na stronie z profilem użytkownika muszę wyświetlić ok. 7 takich informacji, które w bazie mają wartości liczbowe.
lobopol
Tablica, nie wiem jak z wydajnością, ale jeżeli nie będziesz wyświetlał tysięcy użytkowników naraz to nie zauważysz różnicy. Choć wydaje mi się, że tablica byłaby najszybsza. Czemu w bazie nie trzymasz wartości w polu typu enum? Wielkościowo i szybkościowo przy takiej liczbie możliwości by się nie różniło.
wiewiorek
No bez jaj - pytasz o wydajność czegoś takiego? Używaj czego chcesz - trudno w tym wypadku mówić w ogóle o wydajności i przewagi jednego rozwiązania nad innym - lol. tongue.gif
ethann
Tablica jest dosyć dobrym rozwiązaniem kiedy korzystał będziesz z tego w różnych miejscach, wtedy nie musisz za każdym razem deklarować tych dwóch tekstów.
A najczytelniejszym rozwiązaniem będzie moim zdaniem skrócona forma if'a.
  1. echo ($user['plec']? "Kobieta": "Mężczyzna");

Oczywiście to tylko kiedy korzystasz z dwóch wyników. W przypadku rangi o wiele wygodniej będzie skorzystać z tablicy jeśli będziesz jedynie wyświetlał jej nazwę.
  1. $rangi = array("Użytkownik", "Moderator", "VIP", "Admin");
  2. echo $rangi[$user['ranga']];

Kiedy jednak zdecydujesz się na podjęcie jeszcze innych kroków odnośnie rang to wygodniej będzie zastosować switch, żeby za każdym razem nie powtarzać if($a==1); else if($a==2); [...].
  1. switch($user['ranga']) {
  2. case 0: //Użytkownik
  3. ShowStatistics();
  4. echo "Użytkownik";
  5. break;
  6. case 1: //Moderator
  7. ShowAllowedModThreads();
  8. echo "Moderator";
  9. break;
  10. case 2: //VIP
  11. ShowVIPStatistics();
  12. echo "VIP";
  13. break;
  14. case 3: //Admin
  15. echo "Admin<br />Informacje zablokowane.";
  16. break;
  17. }
bastard13
A nie można było tak enumów do bazy wrzucić?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.