php – – cislo_slovy() – Konverze čísla na vyjádření slovy

Od posmura

  

Trochu neforemná, ale fungující funkce na převod čísla do slovní podoby:

////////////////////////////////////////////////////////////////////////////////
// Prevod cisla na slova
////////////////////////////////////////////////////////////////////////////////
function cislo_slovy($GET_CISLO) {
  $CISLO_TEST = $GET_CISLO;     

  $CO = array (” “, “,”);   $CIM = array (“”, “.”);

  $CISLO_UPRAVA =  trim(str_replace($CO, $CIM, $CISLO_TEST));

  $MINUS = substr($CISLO_UPRAVA, 0, 1);
  if ( $MINUS == “-“) $MINUS = “mínus “;
  else $MINUS = “”;

  $CISLO_UPRAVA =  str_replace(“-“, “”, $CISLO_UPRAVA);
  if ($CISLO_UPRAVA == “0”) return “nula”;

  $CISLO_ROZKLAD = explode(“.”, $CISLO_UPRAVA);   $CISLO_CELE = (int) $CISLO_ROZKLAD[0];

  $CISLO_CELE_POLE = str_split(strrev($CISLO_CELE), “3”);

  $CISLICE_PREDCHOZI = “”;   $CISLO_SLOVY = “”;

  $CISLO_DELKA = count($CISLO_CELE_POLE);

  if ($CISLO_DELKA > 3) exit(“<div style=’font-weight: bold; color: #ff0000;’>Nejvyšší číslo pro převod: 999999999.</br>Nejvyšší číslo pro převod: -999999999.</div>”);

  $CISLICE_TEXT_1 = array (” “, “jedna”, “dvě”, “tři”, “čtyři”, “pět”, “šest”, “sedm”, “osm”, “devět”);  

  $CISLICE_TEXT_2 = array (” “, “deset”, “dvacet”, “třicet”, “čtyřicet”, “padesát”, “šedesát”, “sedmdesát”, “osmdesát”, “devadesát”);  

  $CISLICE_TEXT_3 = array (” “, “sto”, “stě”, “sta”, “sta”, “set”, “set”, “set”, “set”, “set”);   $CISLICE_TEXT_4 = array (“tisíc”, “tisíc”, “tisíce”, “tisíce”, “tisíce”, “tisíc”, “tisíc”, “tisíc”, “tisíc”, “tisíc”);  

  $CISLICE_TEXT_5 = array (“milión”, “milión”, “milióny”, “milióny”, “milióny”, “miliónů”, “miliónů”, “miliónů”, “miliónů”, “miliónů”);

  $CISLO_TEXT = “”;  

  for ($i = ($CISLO_DELKA – 1); $i >= 0 ; $i–) {
    $CISLO_TMP = str_split(strrev($CISLO_CELE_POLE[$i]), “1”);
    $CISLO_TEXT_TMP = “”;
    for ($y = 0; $y < count($CISLO_TMP); $y++) {
      $PORADI = $y + (3 – count($CISLO_TMP));
      if ($PORADI == 0) {$CISLO_TEXT_TMP = $CISLO_TEXT_TMP . ” ” . $CISLICE_TEXT_1[$CISLO_TMP[$y]] . ” ” . $CISLICE_TEXT_3[$CISLO_TMP[$y]];}
      elseif ($PORADI == 1) {$CISLO_TEXT_TMP = $CISLO_TEXT_TMP . ” ” . $CISLICE_TEXT_2[$CISLO_TMP[$y]];}
      elseif  ($PORADI == 2) {$CISLO_TEXT_TMP = $CISLO_TEXT_TMP . ” ” . $CISLICE_TEXT_1[$CISLO_TMP[$y]]; $POSLEDNI_TMP = $CISLO_TMP[$y];}
    }
    if ($i == 0) $CISLO_TEXT .= $CISLO_TEXT_TMP;
    $POSLEDNI_TMP = substr($CISLO_CELE_POLE[$i], 0, 1);
    if ($i == 1) {
      if (substr(strrev($CISLO_CELE_POLE[$i]), -2) > 9 and substr(strrev($CISLO_CELE_POLE[$i]), -2) < 15) $POSLEDNI_TMP = 1;
      $CISLO_TEXT .= $CISLO_TEXT_TMP . ” ” .  $CISLICE_TEXT_4[$POSLEDNI_TMP];
    }
    if ($i == 2) {
      if (substr(strrev($CISLO_CELE_POLE[$i]), -2) > 9 and substr(strrev($CISLO_CELE_POLE[$i]), -2) < 15) $POSLEDNI_TMP = 9;
      $CISLO_TEXT .= $CISLO_TEXT_TMP . ” ” .  $CISLICE_TEXT_5[$POSLEDNI_TMP];
    }
  }

  $CISLO_TEXT =  preg_replace(‘/(\s+)/’, ‘ ‘, $CISLO_TEXT);

  $CO = array(“deset jedna”, “deset dvě”, “deset tři”, “deset čtyři”, “deset pět”, “deset šest”, “deset sedm”, “deset osm”, “deset devět”);
  $CIM = array (“jedenáct”, “dvanáct”, “třináct”, “čtrnáct”, “patnáct”, “šestnáct”, “sedmnáct”, “osumnáct”, “devatenáct”);
  $CISLO_TEXT = str_replace($CO, $CIM, $CISLO_TEXT);
  $CO = array(“jedna sto”, “jedna tisíc”, “dvě tisíce”, “jedna milión”, “milión tisíc”, “milióny tisíc”, “miliónů tisíc”);
  $CIM = array (“jedno sto”, “jeden tisíc”, “dva tisíce”, “jeden milión”, “milión”, “milióny”, “miliónů”);
  $CISLO_TEXT = str_replace($CO, $CIM, $CISLO_TEXT);

  return $MINUS . $CISLO_TEXT;
}
////////////////////////////////////////////////////////////////////////////////
// Konec – Prevod cisla na slova
////////////////////////////////////////////////////////////////////////////////