Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] problem z bardzo prostą funkcją
Forum PHP.pl > Forum > Przedszkole
linx
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.
drPayton
To są stałe czy brakuje apostrofów/cydzysłowów? Jeśli stałe to widocznie nie są zdefiniowane, sama funkcja jest poprawna...
linx
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. ?>
bartek12421
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. ?>
WojtasSP320
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ć.
Kildyt
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.
drPayton
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 smile.gif
linx
Ok.
Dzięki @WojtasSP320 nie pomyślałem o switch`ach.
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.