Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] problem z bardzo prostą funkcją
linx
post
Post #1





Grupa: Zarejestrowani
Postów: 100
Pomógł: 3
Dołączył: 25.06.2007

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


Witam,
mam problem ze stworzeniem bardzo prostej funkcji:

  1. <?php
  2. function miesiac_nazwa($tekst) {
  3.        $tekst = str_replace('1', STYCZEN, $tekst);
  4.        $tekst = str_replace('2', LUTY, $tekst);
  5.        $tekst = str_replace('3', MARZEC, $tekst);
  6.        $tekst = str_replace('4', KWIECIEN, $tekst);
  7.        $tekst = str_replace('5', MAJ, $tekst);
  8.        $tekst = str_replace('6', CZERWIEC, $tekst);
  9.        $tekst = str_replace('7', LIPIEC, $tekst);
  10.        $tekst = str_replace('8', SIERPIEN, $tekst);
  11.        $tekst = str_replace('9', WRZESIEN, $tekst);
  12.        $tekst = str_replace('10', PAZDZIERNIK, $tekst);
  13.        $tekst = str_replace('11', LISTOPAD, $tekst);
  14.        $tekst = str_replace('12', GRUDZIEN, $tekst);
  15.        return $tekst;
  16. }
  17. ?>


funkcja fajnie działa do momentu kiedy wartość są od 1-9, kiedy wartość są od 10-12 to zawsze wyświetla się styczeń.

Prosił bym o jakieś wskazówki.
Za pomoc z góry dziękuje.
Go to the top of the page
+Quote Post
drPayton
post
Post #2





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


To są stałe czy brakuje apostrofów/cydzysłowów? Jeśli stałe to widocznie nie są zdefiniowane, sama funkcja jest poprawna...
Go to the top of the page
+Quote Post
linx
post
Post #3





Grupa: Zarejestrowani
Postów: 100
Pomógł: 3
Dołączył: 25.06.2007

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


Są to wartości pobierane z getdate():

  1. <?php
  2.  
  3. function miesiac_nazwa($tekst) {
  4.       $tekst = str_replace('1', STYCZEN, $tekst);
  5.       $tekst = str_replace('2', LUTY, $tekst);
  6.       $tekst = str_replace('3', MARZEC, $tekst);
  7.       $tekst = str_replace('4', KWIECIEN, $tekst);
  8.       $tekst = str_replace('5', MAJ, $tekst);
  9.       $tekst = str_replace('6', CZERWIEC, $tekst);
  10.       $tekst = str_replace('7', LIPIEC, $tekst);
  11.       $tekst = str_replace('8', SIERPIEN, $tekst);
  12.       $tekst = str_replace('9', WRZESIEN, $tekst);
  13.       $tekst = str_replace('10', PAZDZIERNIK, $tekst);
  14.       $tekst = str_replace('11', LISTOPAD, $tekst);
  15.       $tekst = str_replace('12', GRUDZIEN, $tekst);
  16.       return $tekst;
  17. }
  18.  
  19.  
  20. $czas = getdate();
  21. $miesiac = $czas['mon'];
  22.  
  23. echo miesiac_nazwa($miesiac);
  24.  
  25. ?>
Go to the top of the page
+Quote Post
bartek12421
post
Post #4





Grupa: Zarejestrowani
Postów: 50
Pomógł: 0
Dołączył: 23.05.2008

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


Moim zdaniem nie chodziło tu o stałe
  1. <?php
  2. function miesiac_nazwa($tekst) {
  3. $liczby = array('1', '2', '3');
  4. $slownie = array('stycznien', 'luty', 'marzec');
  5. $tekst= str_replace($liczby, $slownie, $tekst);
  6. return $text;
  7. ?>
Go to the top of the page
+Quote Post
WojtasSP320
post
Post #5





Grupa: Zarejestrowani
Postów: 87
Pomógł: 13
Dołączył: 13.08.2008
Skąd: Chełmno

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


Jeśli na wejściu podajesz tylko nr miesiąca, to prościej zrobisz to instrukcją switch:

  1. <?php
  2. function nr2month($nr)
  3. {
  4. switch($nr)
  5. {
  6. case 1: {$text = 'STY'; break;}
  7. case 2: {$text = 'LUT'; break;}
  8. case 3: {$text = 'MAR'; break;}
  9. case 4: {$text = 'KWI'; break;}
  10. case 5: {$text = 'MAJ'; break;}
  11. case 6: {$text = 'CZE'; break;}
  12. case 7: {$text = 'LIP'; break;}
  13. case 8: {$text = 'SIE'; break;}
  14. case 9: {$text = 'WRZ'; break;}
  15. case 10: {$text = 'PAŹ'; break;}
  16. case 11: {$text = 'LIS'; break;}
  17. case 12: {$text = 'GRU'; break;}
  18. }
  19.  
  20. return $text;
  21. }
  22. ?>



Trochę lipa z tym str_replace, bo jak zinterpretuje 11 (jako Listopad, czy StyczeńStyczeń)? Jeśli sie mylę, to proszę mnie poprawić.

Ten post edytował WojtasSP320 5.10.2008, 12:32:09
Go to the top of the page
+Quote Post
Kildyt
post
Post #6





Grupa: Zarejestrowani
Postów: 869
Pomógł: 53
Dołączył: 20.10.2003
Skąd: Przeworsk

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


Jeżeli najpierw zmieniasz 1 na styczeń, to nie możesz później zmienić 10 na październik, ponieważ 1 w 10 już nie ma.
Rozwiązanie jest proste. Sprawdź, czy przed cyfrą zawsze jest spacja, wtedy tylko zmieniasz ' 1' na styczeń, albo ' 10' na październik.
Jeżeli nie ma spacji to przed cyframi dodaj jakiś znak, i po. Np. @1@, @10@ i wtedy zmieniasz @1@ na styczeń, a @10@, na październik.
Go to the top of the page
+Quote Post
drPayton
post
Post #7





Grupa: Zarejestrowani
Postów: 890
Pomógł: 65
Dołączył: 13.11.2005
Skąd: Olsztyn

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


Cytat(WojtasSP320 @ 5.10.2008, 13:26:27 ) *
Jeśli na wejściu podajesz tylko nr miesiąca, to prościej zrobisz to instrukcją switch:
(...)
Trochę lipa z tym str_replace, bo jak zinterpretuje 11 (jako Listopad, czy StyczeńStyczeń)? Jeśli sie mylę, to proszę mnie poprawić.


Racja (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
linx
post
Post #8





Grupa: Zarejestrowani
Postów: 100
Pomógł: 3
Dołączył: 25.06.2007

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


Ok.
Dzięki @WojtasSP320 nie pomyślałem o switch`ach.
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: 22.12.2025 - 23:38