Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Jak poprawnie zapisać zmienną(?)
Forum PHP.pl > Forum > Przedszkole
pawel.ad
Witam.
Mam coś takiego:
  1. #Podstawowe.
  2. if($show == "PTS"){
  3. $h = "Najlepiej punktujący";
  4. $thread = "Średnia punktowa";
  5. }
  6. elseif($show == "REB"){
  7. $h = "Najlepiej zbierający";
  8. $thread = "Średnia zbiórek";
  9. }
  10. elseif($show == "AST"){
  11. $h = "Najlepiej asystujący";
  12. $thread = "Średnia asyst";
  13. }
  14. elseif($show == "ST"){
  15. $h = "Najlepiej przechwytujacych";
  16. $thread = "Średnia przechwytów";
  17. }
  18. elseif($show == "BS"){
  19. $h = "Najlepiej blokujący";
  20. $thread = "Średnia bloków";
  21. }
  22. elseif($show == "BA"){
  23. $h = "Najczęściej blokowany";
  24. $thread = "Średnia zablokowanych rzutów";
  25. }
  26.  
  27. #Za 2 punkty.
  28. elseif($show == "_2PM"){
  29. $h = "Najwięcej trafionych rzutów za 2 punkty";
  30. $thread = "Trafione rzuty";
  31. }
  32. elseif($show == "_2PNM"){
  33. $h = "Najwięcej nietrafionych rzutów za 2 punkty";
  34. $thread = "Nietrafione rzuty";
  35. }
  36. elseif($show == "_2PA"){
  37. $h = "Najwięcej rzutów za 2 punkty";
  38. $thread = "Rzuty za 2 punkty";
  39. }
  40. elseif($show == "prc_2P"){
  41. $h = "Najlepsza skuteczność za 2 punkty";
  42. $thread = "Skuteczność za 2 punkty";
  43. }
  44.  
  45. #Za 3 punkty
  46. elseif($show == "_3PM"){
  47. $h = "Najwięcej trafionych rzutów za 3 punkty";
  48. $thread = "Trafione rzuty";
  49. }
  50. elseif($show == "_3PNM"){
  51. $h = "Najwięcej nietrafionych rzutów za 3 punkty";
  52. $thread = "Nietrafione rzuty";
  53. }
  54. elseif($show == "_3PA"){
  55. $h = "Najwięcej rzutów za 3 punkty";
  56. $thread = "Rzuty za 3 punkty";
  57. }
  58. elseif($show == "prc_2P"){
  59. $h = "Najlepsza skuteczność za 3 punkty";
  60. $thread = "Skuteczność za 3 punkty";
  61. }
  62.  
  63. #Za 1 punkt
  64. elseif($show == "FTM"){
  65. $h = "Najwięcej trafionych rzutów wolnych";
  66. $thread = "Trafione rzuty wolne";
  67. }
  68. elseif($show == "FTNM"){
  69. $h = "Najwięcej nietrafionych rzutów wolnych";
  70. $thread = "Nietrafione rzuty wolne";
  71. }
  72. elseif($show == "FTA"){
  73. $h = "Najwięcej rzutów wolnych";
  74. $thread = "Rzuty wolne";
  75. }
  76. elseif($show == "prc_FT"){
  77. $h = "Najlepsza skuteczność z rzutów wolnych";
  78. $thread = "Skuteczność z rzutów wolnych";
  79. };
  80.  

Potrzebuję to do zrobienia liderów z danych kategorii.
To co napisałem działa bardzo dobrze, ale coś czuję że jest bardzo mało logicznie/profesjonalnie/dobrze... smile.gif
Jestem perfekcjonistą, i skoro już coś robię, to chcę to zrobić dobrze.
A więc jak zrobić to logicznie/profesjonalnie/dobrze?

BTW. $show = $_POST['show']
blooregard
Proponuję zamianę na switch

Jest to czytelniejsze i prostsze w rozbudowie o nowe warunki.
mortus
Może lepiej użyć switch-a:
  1. switch($show) {
  2. case 'PTS':
  3. $h = "Najlepiej punktujący";
  4. $thread = "Średnia punktowa";
  5. break;
  6. case 'REB':
  7. ...
  8. break;
  9. ...
  10. }
zend
  1. $options = array(
  2. 'PTS' => array(
  3. 'h' => 'Najlepiej punktujący',
  4. 'thread' => 'Średnia punktow'
  5. ),
  6. 'PTS2' => array(
  7. 'h' => 'Najlepiej punktujący',
  8. 'thread' => 'Średnia punktow'
  9. )
  10. );
  11.  
  12. if(isset($options[$show])) {
  13. $h = $options[$show]['h'];
  14. $thread = $options[$show]['thread'];
  15. } else {
  16. //some fatal errors :)
  17. }

To jest kolejna ciekawa wersja do użycia
pawel.ad
Wiedziałem że da się lepiej! ;-)
Dzięki za pomoc.

OK, to teraz lepiej array, czy switch? smile.gif
I znowu, chodzi mi o to co jest bardziej profesjonalne itp., itd.
blooregard
Cytat
I znowu, chodzi mi o to co jest bardziej profesjonalne itp., itd.

Każde rozwiązanie, które:
- działa zgodnie z oczekiwaniem, nie powodując błędów i notice'ów
- jest czytelne
- jest bezproblemowe do modyfikacji przez kogoś, kto zobaczy to pierwszy raz na oczy
- odpowiednio sformatowane (wcięcia, nawiasy itp.)
- z komentarzami wyjaśniającymi, co "autor miał na mysli", gdy rozwiązanie jest niestandardowe, ale z zachowaniem pierwszego punktu


pawel.ad
Dziękuje bardzo.

Robię ze switch.
Fifi209
Cytat(pawel.ad @ 26.03.2010, 21:01:57 ) *
Dziękuje bardzo.

Robię ze switch.


W takim przypadku moim zdaniem array jest lepszy, większa czytelność kodu - bo będzie go mniej.

Jednak zamiast tego isset użyłbym array_key_exists
zend
Jeżeli mnie pamięc nie myli to array_key_exists jest wolniejsze od isset, dlatego warunek z isset smile.gif
Fifi209
Cytat(zend @ 26.03.2010, 21:38:57 ) *
Jeżeli mnie pamięc nie myli to array_key_exists jest wolniejsze od isset, dlatego warunek z isset smile.gif


A mógłbyś to poprzeć jakimiś testami? smile.gif Moim zdaniem, jeżeli coś jest stworzone do konkretnego zadania to jest wydajniejsze i bardziej optymalne.
zend
"array_key_exists(), at least in 5.2.4, passes the array by value. I conclude this from seeing performance worsen as the array to search got bigger. isset() doesn't have this problem."

performance

Wierzę im na słowo honoru czarodziej.gif

PS. a jeśli ktoś nie jest taki ufny jak ja może bez problemu przeprowadzić testy smile.gif Chętnie dowiem się, że miałem rację aarambo.gif
smentek
Rozwiązanie na tablicach jest moim zdaniem bardziej czytelne. A co do szybkości, isset jest szybsze choćby ze względu na fakt że jest wyrażeniem, nie jest funkcją.

Nie sądzę aby w tym wypadku szybkość miała znaczenie. Mówimy tutaj operacji w fazie wyświetlania wyników i mikrosekundy na tym etapie są mało istotne. Szybkość ma większe znaczenie w fazie wyciągania danych z bazy.
AdamAdax
To ja tylko może wspomnę że switch jest szybszy niż if/elseif/
Fifi209
Cytat(smentek @ 27.03.2010, 09:05:50 ) *
Rozwiązanie na tablicach jest moim zdaniem bardziej czytelne. A co do szybkości, isset jest szybsze choćby ze względu na fakt że jest wyrażeniem, nie jest funkcją.

Nie sądzę aby w tym wypadku szybkość miała znaczenie. Mówimy tutaj operacji w fazie wyświetlania wyników i mikrosekundy na tym etapie są mało istotne. Szybkość ma większe znaczenie w fazie wyciągania danych z bazy.


isset nie jest funkcją? a czym?
mortus
Cytat
Note: Because this is a language construct and not a function, it cannot be called using variable functions
Czyli, że isset jest konstrukcją (inaczej elementem składni) języka php (jak echo). Poza tym array_key_exists() na pewno działa wolniej przy bardzo dużych tablicach, ponieważ mimo wszystko sprawdza klucze, dopóki nie natrafi na ten właściwy, albo dopóki tablica się nie skończy. Tymczasem w isset podajemy konkretny klucz z tablicy.
EDIT:
Źródło: PHP Manual
AdamAdax
Przy okazji nadmienię pewną różnicę pomiędzy isset a array_key_exists.
  1. $ar = array ('a' => 1, 'b' => NULL, 'c'->3);
  2. echo isset($ar['b']); // false
  3. echo array_key_exists('b', $ar); // true


zend
Ooo smile.gif Widzę, że wątek ciekawie się rozwinął(mimo braku testów smile.gif ). Dla osób które czytają wątek i nie wiedzą o co chodzi, to tak jakby tablice przetwarzać funkcją foreach, zamiast for
foreach - array_key_exists
for - isset
Takie szczegóły mają znaczenie dobiero wtedy kiedy przeszukiwana tablica ma powyżej tysiąca elementów, ale itak nie zaszkodzi wiedzieć
Fifi209
Cytat(AdamAdax @ 27.03.2010, 10:58:49 ) *
Przy okazji nadmienię pewną różnicę pomiędzy isset a array_key_exists.
  1. $ar = array ('a' => 1, 'b' => NULL, 'c'->3);
  2. echo isset($ar['b']); // false
  3. echo array_key_exists('b', $ar); // true

Cenne spostrzeżenie. smile.gif
AdamAdax
Cytat(fifi209 @ 27.03.2010, 11:04:13 ) *
Cenne spostrzeżenie. smile.gif


Obecnie przygotowuje się do egzaminu ZCE, tak więc jestem na bieżąco z takimi ciekawostkami PHP winksmiley.jpg

Odnośnie funkcji isset to ma ona pewną przewagę nad array_key_exists. Można jej użyć w ten sposób:
  1. if (isSet($ar['b'], $ar['c'], ...)) {
  2. echo 'tablica posiada klucze b i c';
  3. }


Funkcja unset również może przyjąć wiele argumentów.
smentek
Cytat(fifi209 @ 27.03.2010, 10:22:02 ) *
isset nie jest funkcją? a czym?


Jest wyrażeniem (ang. statement).
AdamAdax
Dla ścisłości... jak donosi manual PHP, isset nie jest ani funkcją ani wyrażeniem. Jest konstrukcją języka.

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.