Не сте регистриран! Регистрирайте се БЕЗПЛАТНО, за да използвате услугите на сайта!

 Словом (изписване на число с думи) - PHP
Автор  Bibi (20.04.2008 18:54) съобщение до автора
Погледнат  886 пъти добави към любими
Оценка добави коментар
Гласове  1 изпрати на приятел
Коментари  (0) абонирай се за PHP
     
Bibi
     
 

Този скрипт изисква php 5.
Примерната функция inWord() проверява за коректност на данните и генерира стринг за левове и стотинки:

CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<?php
//  ============================================================================
function inWord($number) {
 
$number = str_replace(' ','',$number);
 
if ( !preg_match('/^[-+]?[0-9]*\.?[0-9]*$/', $number) ) {
   
throw new Exception('not a number',1);   // PHP 5 only
 
}
 
 
$res = '';
 
if (substr($number, 0, 1) == '-' ) {
   
$res = 'минус ';
   
$number = substr($number, 1);
 
}
 
$parts = preg_split('/[.,]/',$number);
 
if (strlen($parts[0]) > 12 ) {
   
throw new Exception('too big',2);   // PHP 5 only
 
}
 
 
$lv = $parts[0];
 
$st = 0;
 
if (array_key_exists(1, $parts)) {
   
$flval = floatval(substr('0.'.$parts[1], 0, 5));
   
$st = round($flval*100) % 100;
   
$st = strval($st);
 
}

 
if ($lv != 0) {
   
$res .= toSlovom($lv, 'male') .'лв.';
 
}
 
if ($st != 0) {
   
if ($res != '') $res .= ' и ';
   
$res .= toSlovom($st, 'female') .'ст.';
 
}
 
if ($res == '') $res = 'нула лв.';
 
 
return $res;
}
?>
Скрипта:
CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
<?php
//  ----------------------------------------------------------------------------
function toSlovom($num, $Gender) {
//$num : стринг с макс. 12 цифри,
//$Gender : 'male', 'female', 'middle' = default
 
$TempGender = Array($Gender,'female','male','male');
 
$mantisi = Array(Array('','хиляди ','милиона ','милиарда '),
                  
Array('','хилядa ','милион ','милиард '));
 
$in_pos = 0;
 
$Result = '';
   
 
$s = strval($num);
 
$len = intval((strlen($s) + 2)/3);
 
$s = str_pad($s, 3*$len, '0', STR_PAD_LEFT);
 
$gr = str_split($s, 3);   // PHP 5 only
 
 
for ($i = 0; $i < $len; $i++) {
   
$j = $len - 1 - $i;
   
if ($gr[$i] != '000') {
     
if ($j == 1 && $gr[$i] == '001') {  // хиляда
       
$ss = '';
     
} else {
       
$ss = convert($gr[$i], $TempGender[$j]);
     
}
     
if ($gr[$i] == '001') $pl = 1; else $pl = 0;
     
$ss .= $mantisi[$pl][$j];
     
     
if (strpos($ss, ' и ') === false) $in_pos = strlen($Result); else $in_pos = 0;
     
$Result .= $ss;
   
}
  }
 
if ($in_pos != 0) {
      
$Result = substr_replace($Result, 'и ', $in_pos, 0);
 
}
   
 
return $Result;
}

//  ----------------------------------------------------------------------------
function convert($in_s, $Gender) {
 
$stotici  = Array('','сто ','двеста ','триста ');
 
$desetici = Array('десет ','единадесет ','дванадесет ');
 
$edinici  = Array('','едно','две','три','четири','пет','шест','седем','осем','девет');
 
if ($Gender == 'male') {
   
$edinici[1] = 'един'; $edinici[2] = 'два';
 
} else if ($Gender == 'female') {
   
$edinici[1] = 'една';
 
}
 
$c = str_split($in_s);   // PHP 5 only
 
 
$Result = '';
 
if ($c[0] > 0 && $c[0] <= 3) $Result = $stotici[$c[0]];
 
else if ($c[0] > 3) $Result = $edinici[$c[0]] .'стотин ';
 
 
if ($c[1] == 1) {
   
if ($Result != '') $Result .= 'и ';
   
if ($c[2] >= 0 && $c[2] <= 2) $Result .= $desetici[$c[2]];
   
else $Result .= $edinici[$c[2]] .'надесет ';
 
}
 
else {
   
if ($c[1] > 1) {
     
if ($Result != '' && $c[2] == 0 ) $Result .= 'и ';
     
if ($c[1] == 2) $Result .= 'двадесет ';
     
else $Result .= $edinici[$c[1]] .'десет ';
   
}
   
   
if ($c[2] != 0) {
     
if ($Result != '') $Result .= 'и ';
     
$Result .= $edinici[$c[2]] .' ';
   
}
  }
 
 
return $Result;
}
?>


Ето как може да се тества:

CODE
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=windows-1251">
  </head>
  <body>
<?php
$err = Array(1=>'не е число!', 2=>'- много голямо!');
$number = $_GET['n'];

try {
 
echo '<i>'. inWord($number) .'</i>';
}
catch (Exception $e) {
 
$trc = $e->getTrace();
 
echo '<b>'.$trc[0]['args'][0].'</b> '.$err[$e->getCode()];
}
?>
  </body>
</html>

За да сработи в php4, трябва да се махнат ексепшъните и освен това str_split() да се замени с някаква подходяща функция, примерно:

CODE
1
2
3
4
5
6
7
<?php
function splitstring($string, $len=1) {
 
for ($i = 0; $i < ceil(strlen($string)/$len); $i++)
   
$rtnarr[$i] = substr($string, $len*$i, $len);
 
return($rtnarr);
}
?>



Ключови думи: php изписване на число с думи стринг лев




 1 посетител чете този скрипт (0 потребители и 1 гост)  
Активни потребители: ---
   
  

Еmail  
 

 

 
  • Интересно от Софтуер
 
  • Интересно от myLINKS
 
 
 
 
 



IT-PLACE.NET © 2004 - 2008