Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem ze 'switch' w polaczeniu z 'date()', wybiorcze dzialanie switcha
sirapacz
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 16.08.2005

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


1. Jako ze jestem nowym userem na forum - witam wszystkich:)
2. Ucze sie obecnie php i natrafilem na pewien problem ktory nie daje mi spokoju (teoretycznie moglbym olac i isc dalej z materialem ale cholernie mnie zaintrygowal...)
3. Problem polega na tym ze jest sobie funkcja oraz kod ja testujacy:
  1. <?
  2. // kod sprawdzajacy dzialanie funkcji zamieniajacej zwracana wartosc date() na polskie odpowiedniki w postaci wyrazow
  3.  
  4.  
  5. function konwersja ($miesiac){
  6.  
  7. // zadeklarowanie funkcji 'konwersja' która zamieni wartosci 00-12 na slowa
  8.  
  9. switch ($miesiac) 
  10.  
  11. {
  12.  
  13. case '01' : $miesiac='styczen' ; break;
  14. case '02' : $miesiac='luty' ; break;
  15. case '03' : $miesiac='marzec' ; break;
  16. case '04' : $miesiac='kwiecień'; break;
  17. case '05' : $miesiac='maj' ; break;
  18. case '06' : $miesiac='czerwiec' ; break;
  19. case '07' : $miesiac='lipiec' ; break;
  20. case '08' : $miesiac='sierpien' ; break;
  21. case '09' : $miesiac='wrzesien' ; break;
  22. case '10' : $miesiac='pazdziernik' ; break;
  23. case '11' : $miesiac='listopad' ; break;
  24. case '12' : $miesiac='grudzien' ; break;
  25. default : $miesiac = 'blad'; break;
  26. }
  27.  
  28. return $miesiac;
  29.  
  30. }
  31.  
  32.  
  33. $test = konwersja (date(m));
  34. //przypisanie do zmiennej wyniku konwersji i pozniej wyswietlenie w dolnym wierszu
     //aktualnego miesiaca zamienionego na slowo(print na koncu)
  35.  
  36. print (konwersja(01) . konwersja(02) . konwersja(03) . konwersja(04) . konwersja(05) . konwersja(06) . konwersja(07) . konwersja(08) . konwersja(09) . konwersja(10) . konwersja(11) . konwersja(12));
  37. // sprawdzenie wszystkich mozliwosci zamiany czyli od 00-12
  38. print ("<br> $test");
  39. //puszczenie wyniku w zmiennej $test
  40. ?>


Dzialanie tego kodu jest takie: switch przyporzadkowuje wyrazeniom 00-12 slownie miesiace a potem jest wyswietlane slowo dla kazdej wartosci obslugiwanej przez switch. Wszystko pieknie ale to jest wyjscie jakie sie pokazuje na ekranie po odpaleniu:

styczenlutymarzeckwiecieńmajczerwieclipiecbladbladpazdzierniklistopadgrudzien
sierpien

pierwszy wiersz to kolejno dzialanie funkcji konwersja na podane wartosci 01 02...itd

na 08 i 09 gdzie powinien byc sierpien i wrzesien switch nie rozpoznaje z jakiegos magicznego dla mnie narazie powodu wartosci i leci do defaulta wyrzucajac na ekran slowo 'blad'

ale - jak wyciagne to '08' z funkcji date(m) to dziala - co jest pokazane wiersz nizej w wyniku....

probuje dojsc juz od 3h co moze byc przyczyna tego zachowania i niedaje mi to spokoju bo jak na takim prostym skrypcie pakuje sie na taki znajac zycie trywialny blad to przy trudniejszych i skomplikowanych bede wlosy rwal z glowy a nie dojde do rozwiazania....

ten skrypt nie ma jakiegos specjalnego sensu - ucze sie na nim. chce sie dowiedziec co spieprzylem ze wybiorczo jest przekazywana zmienna $miesiac do switcha...

Calosc testuje na najnowszym krasnalu (www.krasnal.tk) pod win98se

TIA
pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




albo zmien swictch na 1,2,
i wywoluj metode:konwersja(0), konwersja(1)

albo wywowulj tak jak jest w swicth, czyli
konwersja('00'), konwersja('08'). Widzisz różnicę?

Polecam pierwszys sposób
Go to the top of the page
+Quote Post
sirapacz
post
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 16.08.2005

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


no ale problem jest wlasnie ze jest podawane tak jak powinno byc tzn:

konwersja (08) i jak przy innych (01-07 oraz 10-12) to dziala tak przy 08 i 09 switch nie rozpoznaje tych wartosci - nad tym sie tak zasadzam bo obejsc to mozna ale nie jest dla mnie wazne zrobienie zeby ten kod dzialal - bo to szkoleniowy szkic - tylko zrozumienie dlaczego nie dziala.
analizowalem literka po literce kod i nie znalazlem nic co moim zdaniem jest nie tak. Stad owa moja frustracja ze powinno dzialac a ta sie zawziela i dziala wybiorczo:)
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No to chyba ci podalem rozwiązanie 2).
W switch dajesz w ciapkach '08'. Do funkcji zapodajesz ala integer 08, który jest konwertowany jakoś smiesznie i twoj switch nie ma go w wwarunku. Musisz walic do funkcji tekst (bo w switch tekst sprawdzasz) '08'
Funkcja date('m') też zwraca tekst '08' a nie 08.
Go to the top of the page
+Quote Post
sirapacz
post
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 16.08.2005

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


ok teraz sie przyjrzalem i wsadzilem w apostrofy wartosci i dziala

co prawda nadal nie wiem czemu wartosci inne niz 08 i 09 sa rozpoznawane poprawnie a te nie ale szkoda narazie na to czasu - ide dalej z materialem.
dziekuje za pomoc:)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 15.09.2025 - 23:30