Ok zrobiłem tak ;
<?php
class pl {
static function convert
($number) { // check if number is negative
$negative = false;
if($number < 0) {
$negative = true;
$number = abs($number); // turn to positive }
if($number == 0) { // if zero return zero
return 'zero';
}
$i = -1; // our numberMap key
$result = '';
while($number >= 1) {
$token = $number % 1000; // get 3 digits
$number = ($number - $token) / 1000; // cut the number
if($i >= 0) { // if numberMap key is greater than equal thousands
list($first, $second, $third) = self::$numberMap[$i]; // get plural values from numberMap
$pluralize = self::pluralize($token, $first, $second, $third); // pluralize
} else {
$pluralize = '';
}
if($token != 0) { // for zero we don't write anything to output
$hundredsOf = self::hundredsOf($token) . ' '; // convert 3 digit token
$result = $hundredsOf . $pluralize . ' ' . $result ; // add to output string
}
$i++;
}
return trim($negative ?
'minus ' . $result : $result); }
static function pluralize
($number, $first, $second, $third) { $number = abs($number); // get absolute value, for negative numbers algoritm is the same if($number > 20) { // if number is greater than 20
$number %= 10; // get the last digit
if($number == 1) { // for 21, 31, 41, ... result is the same as for 0
$number--;
}
}
if($number == 1) { // 1 - first case
return $first;
} else if($number >= 2 && $number <= 4) { // 2,3,4 - second case
return $second;
} else { // 0,6,7,8,9 - third case
return $third;
}
}
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') );
'jeden', 'dwa', 'trzy',
'cztery', 'pięć', 'sześć',
'siedem', 'osiem', 'dziewięć'
);
'dziesięć', 'dwadzieścia', 'trzydzieści',
'czterdzieści', 'pięćdziesiąt', 'sześćdziesiąt',
'siedemdziesiąt', 'osiemdziesiąt', 'dziewięćdziesiąt'
);
'jedenaście', 'dwanaście', 'trzynaście',
'czternaście', 'piętnaście', 'szesnaście',
'siedemnaście', 'osiemnaście', 'dziewiętnaście'
);
'sto', 'dwieście', 'trzysta',
'czterysta', 'pięćset', 'sześćset',
'siedemset', 'osiemset', 'dziewięćset'
);
protected
static function hundredsOf
($number) { $ones = $number % 10;
$tens = (($number % 100) - $ones);
$hundreds = ($number - $tens - $ones) / 100;
$tens /= 10;
$result = '';
if($hundreds != 0) {
$result .= self::$hundreds[$hundreds - 1] . ' ';
}
if($tens == 1 && $ones != 0) {
$result .= self::$specialTens[$ones - 1] . ' ';
} else {
if($tens != 0) {
$result .= self::$tens[$tens - 1] . ' ';
}
if($ones != 0) {
$result .= self::$ones[$ones - 1] . ' ';
}
}
}
}
?>
<?php echo pl
::convert($numer);?>