Loading:

Postanowienia noworoczne - a Ty czego nauczysz się w nowym roku? [-25%]

Kwota, liczba słownie PHP

Skrypt pobiera liczbę w postaci np. 123.30 i zapisuje ją słownie. Kod można pobrać poniżej.

Przykład użycia dla wyświetlenia liczby słownie:

echo slownie(123.30);

Przykład użycia dla wyświetlenia kwoty słownie:

echo kwotaslownie(123.30);



Napisz Artykuł

Listing


<?php

if(!function_exists('str_split')){
  function str_split($string,$len = 1) {
        if ($len < 1) return false;
    for($i=0, $rt = Array();$i<ceil(strlen($string)/$len);$i++)
      $rt[$i] = substr($string, $len*$i, $len);
    return($rt);
  }
}

$slowa = Array(
  'minus',

  Array(
    'zero',
    'jeden',
    'dwa',
    'trzy',
    'cztery',
    'pięć',
    'sześć',
    'siedem',
    'osiem',
    'dziewięć'),

  Array(
    'dziesięć',
    'jedenaście',
    'dwanaście',
    'trzynaście',
    'czternaście',
    'piętnaście',
    'szesnaście',
    'siedemnaście',
    'osiemnaście',
    'dziewiętnaście'),

  Array(
    'dziesięć',
    'dwadzieścia',
    'trzydzieści',
    'czterdzieści',
    'pięćdziesiąt',
    'sześćdziesiąt',
    'siedemdziesiąt',
    'osiemdziesiąt',
    'dziewięćdziesiąt'),

  Array(
    'sto',
    'dwieście',
    'trzysta',
    'czterysta',
    'pięćset',
    'sześćset',
    'siedemset',
    'osiemset',
    'dziewięćset'),

  Array(
    'tysiąc',
    'tysiące',
    'tysięcy'),

  Array(
    'milion',
    'miliony',
    'milionów'),

  Array(
    'miliard',
    'miliardy',
    'miliardów'),

  Array(
    'bilion',
    'biliony',
    'bilionów'),

  Array(
    'biliard',
    'biliardy',
    'biliardów'),

  Array(
    'trylion',
    'tryliony',
    'trylionów'),

  Array(
    'tryliard',
    'tryliardy',
    'tryliardów'),

  Array(
    'kwadrylion',
    'kwadryliony',
    'kwadrylionów'),

  Array(
    'kwintylion',
    'kwintyliony',
    'kwintylionów'),

  Array(
    'sekstylion',
    'sekstyliony',
    'sekstylionów'),

  Array(
    'septylion',
    'septyliony',
    'septylionów'),

  Array(
    'oktylion',
    'oktyliony',
    'oktylionów'),

  Array(
    'nonylion',
    'nonyliony',
    'nonylionów'),

  Array(
    'decylion',
    'decyliony',
    'decylionów')
);

function odmiana($odmiany, $int){ // $odmiany = Array('jeden','dwa','pięć')
  $txt = $odmiany[2];
  if ($int == 1) $txt = $odmiany[0];
  $jednosci = (int) substr($int,-1);
  $reszta = $int % 100;
  if (($jednosci > 1 && $jednosci < 5) &! ($reszta > 10 && $reszta < 20))
    $txt = $odmiany[1];
  return $txt;
}

function liczba($int){ // odmiana dla liczb < 1000
  global $slowa;
  $wynik = '';
  $j = abs((int) $int);

  if ($j == 0) return $slowa[1][0];
  $jednosci = $j % 10;
  $dziesiatki = ($j % 100 - $jednosci) / 10;
  $setki = ($j - $dziesiatki*10 - $jednosci) / 100;

  if ($setki > 0) $wynik .= $slowa[4][$setki-1].' ';

  if ($dziesiatki > 0)
        if ($dziesiatki == 1) $wynik .= $slowa[2][$jednosci].' ';
  else
    $wynik .= $slowa[3][$dziesiatki-1].' ';

  if ($jednosci > 0 && $dziesiatki != 1) $wynik .= $slowa[1][$jednosci].' ';
  return $wynik;
}

function slownie($int){

  global $slowa;

  $in = preg_replace('/[^-\d]+/','',$int);
  $out = '';

  if ($in{0} == '-'){
    $in = substr($in, 1);
    $out = $slowa[0].' ';
  }

  $txt = str_split(strrev($in), 3);

  if ($in == 0) $out = $slowa[1][0].' ';

  for ($i = count($txt) - 1; $i >= 0; $i--){
    $liczba = (int) strrev($txt[$i]);
    if ($liczba > 0)
      if ($i == 0)
        $out .= liczba($liczba).' ';
          else
        $out .= ($liczba > 1 ? liczba($liczba).' ' : '')
          .odmiana( $slowa[4 + $i], $liczba).' ';
  }
  return trim($out);
}
function kwotaslownie($kwota){
  $kwota = explode('.', $kwota);
 
  $zl = preg_replace('/[^-\d]+/','', $kwota[0]);
  $gr = preg_replace('/[^\d]+/','', substr(isset($kwota[1]) ? $kwota[1] : 0, 0, 2));
  while(strlen($gr) < 2) $gr .= '0';

  echo slownie($zl) . ' ' . odmiana(Array('złoty', 'złote', 'złotych'), $zl) .
      (intval($gr) == 0 ? '' :
      ' ' . slownie($gr) . ' ' . odmiana(Array('grosz', 'grosze', 'groszy'), $gr));
}


?>


Ten wpis posiada swój wątek na forum

Wszystkie pytania prosimy kierować właśnie tam ponieważ komentarze to miejsce na poprawki do kodu lub alternatywne rozwiązania i pytania nie będą publikowane

http://forum.funkcje.net/forum/viewtopic.php?f=2&t=1628

Dane do logowania na forum są takie same jak na funkcje.net



Dodano przez: igor
Ranga: Administrator serwisu Punktów: 28716
Komentarze użytkowników
To samo tylko jako klasa, pozdro
  • Zobacz kod dodany do tego wpisu
    • <?php

      class D2W_pl {

              public static function getSlowa()
              {
                      return  Array(
                        'minus',
                     
                        Array(
                          'zero',
                          'jeden',
                          'dwa',
                          'trzy',
                          'cztery',
                          'pięć',
                          'sześć',
                          'siedem',
                          'osiem',
                          'dziewięć'),
                     
                        Array(
                          'dziesięć',
                          'jedenaście',
                          'dwanaście',
                          'trzynaście',
                          'czternaście',
                          'piętnaście',
                          'szesnaście',
                          'siedemnaście',
                          'osiemnaście',
                          'dziewiętnaście'),
                     
                        Array(
                          'dziesięć',
                          'dwadzieścia',
                          'trzydzieści',
                          'czterdzieści',
                          'pięćdziesiąt',
                          'sześćdziesiąt',
                          'siedemdziesiąt',
                          'osiemdziesiąt',
                          'dziewięćdziesiąt'),
                     
                        Array(
                          'sto',
                          'dwieście',
                          'trzysta',
                          'czterysta',
                          'pięćset',
                          'sześćset',
                          'siedemset',
                          'osiemset',
                          'dziewięćset'),
                     
                        Array(
                          'tysiąc',
                          'tysiące',
                          'tysięcy'),
                     
                        Array(
                          'milion',
                          'miliony',
                          'milionów'),
                     
                        Array(
                          'miliard',
                          'miliardy',
                          'miliardów'),
                     
                        Array(
                          'bilion',
                          'biliony',
                          'bilionów'),
                     
                        Array(
                          'biliard',
                          'biliardy',
                          'biliardów'),
                     
                        Array(
                          'trylion',
                          'tryliony',
                          'trylionów'),
                     
                        Array(
                          'tryliard',
                          'tryliardy',
                          'tryliardów'),
                     
                        Array(
                          'kwadrylion',
                          'kwadryliony',
                          'kwadrylionów'),
                     
                        Array(
                          'kwintylion',
                          'kwintyliony',
                          'kwintylionów'),
                     
                        Array(
                          'sekstylion',
                          'sekstyliony',
                          'sekstylionów'),
                     
                        Array(
                          'septylion',
                          'septyliony',
                          'septylionów'),
                     
                        Array(
                          'oktylion',
                          'oktyliony',
                          'oktylionów'),
                     
                        Array(
                          'nonylion',
                          'nonyliony',
                          'nonylionów'),
                     
                        Array(
                          'decylion',
                          'decyliony',
                          'decylionów')
                      );
              }
              public static function str_split($string,$len = 1) {
                      if ($len < 1) return false;
                  for($i=0, $rt = Array();$i<ceil(strlen($string)/$len);$i++)
                    $rt[$i] = substr($string, $len*$i, $len);
                  return($rt);
                }
             
              public static function odmiana($odmiany, $int){ // $odmiany = Array('jeden','dwa','pięć')
                $txt = $odmiany[2];
                if ($int == 1) $txt = $odmiany[0];
                $jednosci = (int) substr($int,-1);
                $reszta = $int % 100;
                if (($jednosci > 1 && $jednosci < 5) &! ($reszta > 10 && $reszta < 20))
                  $txt = $odmiany[1];
                return $txt;
              }
             
              public static function liczba($int){ // odmiana dla liczb < 1000

                $slowa = self::getSlowa();
                $wynik = '';
                $j = abs((int) $int);
             
                if ($j == 0) return $slowa[1][0];
                $jednosci = $j % 10;
                $dziesiatki = ($j % 100 - $jednosci) / 10;
                $setki = ($j - $dziesiatki*10 - $jednosci) / 100;
             
                if ($setki > 0) $wynik .= $slowa[4][$setki-1].' ';
             
                if ($dziesiatki > 0)
                      if ($dziesiatki == 1) $wynik .= $slowa[2][$jednosci].' ';
                else
                  $wynik .= $slowa[3][$dziesiatki-1].' ';
             
                if ($jednosci > 0 && $dziesiatki != 1) $wynik .= $slowa[1][$jednosci].' ';
                return $wynik;
              }
             
              public static function slownie($int){
             
                $slowa = self::getSlowa();
             
                $in = preg_replace('/[^-d]+/','',$int);
                $out = '';
             
                if ($in{0} == '-'){
                  $in = substr($in, 1);
                  $out = $slowa[0].' ';
                }
             
                $txt = self::str_split(strrev($in), 3);
             
                if ($in == 0) $out = $slowa[1][0].' ';
             
                for ($i = count($txt) - 1; $i >= 0; $i--){
                  $liczba = (int) strrev($txt[$i]);
                  if ($liczba > 0)
                    if ($i == 0)
                      $out .= self::liczba($liczba).' ';
                        else
                      $out .= ($liczba > 1 ? self::liczba($liczba).' ' : '')
                        .self::odmiana( $slowa[4 + $i], $liczba).' ';
                }
                return trim($out);
              }
             
              public static function kwotaslownie($kwota){
                $kwota = explode('.', $kwota);
               
                $zl = preg_replace('/[^-d]+/','', $kwota[0]);
                $gr = preg_replace('/[^d]+/','', substr(isset($kwota[1]) ? $kwota[1] : 0, 0, 2));
                while(strlen($gr) < 2) $gr .= '0';
             
                echo self::slownie($zl) . ' ' . self::odmiana(Array('złoty', 'złote', 'złotych'), $zl) .
                    (intval($gr) == 0 ? '' :
                    ' ' . self::slownie($gr) . ' ' . self::odmiana(Array('grosz', 'grosze', 'groszy'), $gr));
              }
      }
      echo D2W_pl::kwotaslownie("12920.23");

      ?>
       
autor: webrock.eu | 4309 | 2009-11-04 15:57:02


    • Treść komentarza
      Kod do komentarza (opcjonalnie)
      PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
      Autor
      Token
      token

       

       








funkcje.net
Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-17 v.1.5 | design: diviXdesign & rainbowcolors