Loading:


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));
}


?>




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


Krótsza definicja funkcji odmiana() i bardziej intuicyjne jej użycie:
  • Zobacz kod dodany do tego wpisu
    • function odmiana($a,$b,$c){$a=abs($a);return $b.($c[abs($a%10-3)>1||abs($a%100-13)<2?$a-1?0:1:2]??$c[0]);};

      echo $liczba . odmiana( $liczba, ' sztuk', [ 0 => '', 1 => 'a', 2 => 'y' ] );
      // lub krócej: echo odmiana($liczba,"$liczba sztuk",['','a','y']);
autor: Emeszenes | 13119 | 2020-04-05 12:41:49


    • 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-2024 v.1.5 | design: diviXdesign & rainbowcolors