Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Jak poprawnie zapisać zmienną(?)
pawel.ad
post
Post #1





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 8.03.2010
Skąd: Zielona Góra

Ostrzeżenie: (0%)
-----


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']

Ten post edytował pawel.ad 26.03.2010, 20:11:10
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
blooregard
post
Post #2


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




Proponuję zamianę na switch

Jest to czytelniejsze i prostsze w rozbudowie o nowe warunki.


--------------------
Life's simple... You make choices and don't look back...
Go to the top of the page
+Quote Post
mortus
post
Post #3





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


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. }
Go to the top of the page
+Quote Post
zend
post
Post #4





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

Ostrzeżenie: (0%)
-----


  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

Ten post edytował zend 26.03.2010, 20:42:45
Go to the top of the page
+Quote Post
pawel.ad
post
Post #5





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 8.03.2010
Skąd: Zielona Góra

Ostrzeżenie: (0%)
-----


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.

Ten post edytował pawel.ad 26.03.2010, 20:50:19
Go to the top of the page
+Quote Post
blooregard
post
Post #6


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




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




--------------------
Life's simple... You make choices and don't look back...
Go to the top of the page
+Quote Post
pawel.ad
post
Post #7





Grupa: Zarejestrowani
Postów: 60
Pomógł: 0
Dołączył: 8.03.2010
Skąd: Zielona Góra

Ostrzeżenie: (0%)
-----


Dziękuje bardzo.

Robię ze switch.
Go to the top of the page
+Quote Post
Fifi209
post
Post #8





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


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

Ten post edytował fifi209 26.03.2010, 21:16:59


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
zend
post
Post #9





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

Ostrzeżenie: (0%)
-----


Jeżeli mnie pamięc nie myli to array_key_exists jest wolniejsze od isset, dlatego warunek z isset smile.gif
Go to the top of the page
+Quote Post
Fifi209
post
Post #10





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


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.


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
zend
post
Post #11





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

Ostrzeżenie: (0%)
-----


"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

Ten post edytował zend 26.03.2010, 22:04:51
Go to the top of the page
+Quote Post
smentek
post
Post #12





Grupa: Zarejestrowani
Postów: 130
Pomógł: 11
Dołączył: 7.04.2003

Ostrzeżenie: (10%)
X----


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.


--------------------
.:SMENTEK:.
Go to the top of the page
+Quote Post
AdamAdax
post
Post #13





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 1.07.2008

Ostrzeżenie: (0%)
-----


To ja tylko może wspomnę że switch jest szybszy niż if/elseif/
Go to the top of the page
+Quote Post
Fifi209
post
Post #14





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


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?


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
mortus
post
Post #15





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


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

Ten post edytował mortus 27.03.2010, 10:45:05
Go to the top of the page
+Quote Post
AdamAdax
post
Post #16





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 1.07.2008

Ostrzeżenie: (0%)
-----


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


Go to the top of the page
+Quote Post
zend
post
Post #17





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

Ostrzeżenie: (0%)
-----


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ć
Go to the top of the page
+Quote Post
Fifi209
post
Post #18





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

Ostrzeżenie: (0%)
-----


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


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
AdamAdax
post
Post #19





Grupa: Zarejestrowani
Postów: 16
Pomógł: 0
Dołączył: 1.07.2008

Ostrzeżenie: (0%)
-----


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.

Ten post edytował AdamAdax 27.03.2010, 11:25:26
Go to the top of the page
+Quote Post
smentek
post
Post #20





Grupa: Zarejestrowani
Postów: 130
Pomógł: 11
Dołączył: 7.04.2003

Ostrzeżenie: (10%)
X----


Cytat(fifi209 @ 27.03.2010, 10:22:02 ) *
isset nie jest funkcją? a czym?


Jest wyrażeniem (ang. statement).


--------------------
.:SMENTEK:.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 12:21