Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: przemiana liczb na słowa
Forum PHP.pl > Forum > PHP
rivos
Witam mam taki problem z tym kodem:
  1. <?php
  2. function policz($l,$t1,$t2,$t3) {
  3. $j = array("", "jeden ", "dwa ", "trzy ", "cztery ", "pięć ", "sześć ",
  4. "siedem ", "osiem ", "dziewięć ", "dziesięć ", "jedenaście ",
  5. "dwanaście ", "trzynaście ", "czternaście ", "piętnaście ",
  6. "szesnaście ", "siedemnaście ", "osiemnaście ", "dziewiętnaście ");
  7. $d = array("", "", "dwadzieścia ", "trzydzieści ", "czterdzieści ",
  8. "pięćdziesiąt ", "sześćdziesiąt ", "siedemdziesiąt ",
  9. "osiemdziesiąt ", "dziewięćdziesiąt ");
  10. $s = array("","sto ", "dwieście ", "trzysta ", "czterysta ", "pięćset ",
  11. "sześćset ", "siedemset ", "osiemset ", "dziewięćset ");
  12.  
  13. $txt = $s[0+substr($l,0,1)];
  14. if (substr($l,1,2)<20) $txt .= $j[0+substr($l,1,2)];
  15. else $txt .= $d[0+substr($l, 1,1)].$j[0+substr($l, 2,1)];
  16. if ($l<>0) if ($l==1) $txt .= "$t1 "; else {
  17. if ((substr($l,2,1)==2 or substr($l,2,1)==3 or substr($l,2,1)==4)
  18. and (substr($l,1,2)>20 or substr($l,1,2)<10))
  19. $txt .= "$t2 "; else $txt .= "$t3 ";
  20. }
  21. return $txt;
  22. }
  23.  
  24. function slownie($liczba) {
  25. $liczba=sprintf("%012d",$liczba);
  26. $txt .= policz(substr($liczba, 0,3)," miliard "," miliardy "," miliardów ");
  27. $txt .= policz(substr($liczba, 3,3)," milion "," miliony "," milionów ");
  28. $txt .= policz(substr($liczba, 6,3)," tysiąc "," tysiące "," tysięcy ");
  29. $txt .= policz(substr($liczba, 9,3)," "," "," ");
  30. if ($liczba==0) $txt="zero";
  31. return $txt;
  32. }
  33. function przelicz($stringa) {
  34.  
  35. $m = preg_match_all('/[0-9]/', $stringa, $match);
  36.  
  37. if ($m) {
  38. $links=$match[0];
  39. for ($j=0;$j<$m;$j++) {
  40. $stringa=str_replace($links[$j],slownie($links[$j]),$stringa);
  41. }
  42. }
  43.  
  44. return $stringa;
  45. }
  46. $asdas = "312 d a";
  47. $asdax = $asdas;
  48. while(preg_replace('/([^0-9])/', '\\1', $asdas) >= 1) {
  49. $kuz = preg_replace('/([^0-9])/', '\\1', $asdas);
  50. $asdas = str_replace($kuz, slownie($kuz), $asdas);
  51. $asdas = str_replace($kuz, '', $asdas.$asdax);
  52. }
  53. ?>


i to dziadostwo daje mi tylko trzysta dwanaście bez kolejnych znaków - " d a"

mam jeszcze jeden:
  1. <?php
  2. $asdas = "312 d a";
  3. $asdax = $asdas;
  4. while(preg_replace('/([^0-9])/', '\\1', $asdas) >= 1) {
  5. $kuz = preg_replace('/([^0-9])/', '\\1', $asdas);
  6. $asdas = str_replace($kuz, przelicz($kuz), $asdas);
  7. $asdas = str_replace($kuz, '', $asdas.$asdax);
  8. }
  9. ?>
ale daje trzy jeden dwa d a

Proszę o pomoc
Necsord
http://forum.php.pl/index.php?showtopic=12806

Gotowe rozwiązania wystarczą czy chcesz iść w swoje?
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.