Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem ze 'switch' w polaczeniu z 'date()'
Forum PHP.pl > Forum > Przedszkole
sirapacz
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
nospor
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
sirapacz
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:)
nospor
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.
sirapacz
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:)
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.