Как преобразовать число в текст в php?

Пользователь

от nicola , в категории: PHP , 2 года назад

Как преобразовать число в текст в php?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от dmitrypro77 , 2 года назад

@nicola Используйте strval() функцию чтобы преобразовать любое число в текст или строку на PHP, ниже код как пример:


1
2
3
4
5
6
<?php

$num = 10;
$str = strval($num);

echo $str;


Всегда открыт для интересных проектов. Ссылки на мои соц. сети в профиле.

Пользователь

от jerad.kuphal , год назад

@nicola 

В PHP есть несколько способов преобразования числа в текст:

  1. С помощью функции number_format:
1
2
3
$number = 1234.56;
$text = number_format($number, 2, '.', ',');
echo $text; // выводит "1,234.56"


  1. С помощью библиотеки NumToWords:
1
2
3
4
5
require_once 'NumToWords/Autoloader.php';
use NumToWordsNumToWords;
$numToWords = new NumToWords();
$text = $numToWords->toWords(1234.56, 'en_US');
echo $text; // выводит "one thousand two hundred thirty-four dollars and fifty-six cents"


  1. С помощью самописной функции:
 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
function num2text($num) {
    $ones = array(
        0 => 'ноль', 1 => 'один', 2 => 'два', 3 => 'три', 4 => 'четыре',
        5 => 'пять', 6 => 'шесть', 7 => 'семь', 8 => 'восемь', 9 => 'девять'
    );
    $tens = array(
        10 => 'десять', 11 => 'одиннадцать', 12 => 'двенадцать', 13 => 'тринадцать',
        14 => 'четырнадцать', 15 => 'пятнадцать', 16 => 'шестнадцать', 17 => 'семнадцать',
        18 => 'восемнадцать', 19 => 'девятнадцать', 20 => 'двадцать', 30 => 'тридцать',
        40 => 'сорок', 50 => 'пятьдесят', 60 => 'шестьдесят', 70 => 'семьдесят',
        80 => 'восемьдесят', 90 => 'девяносто'
    );
    $hundreds = array(
        100 => 'сто', 200 => 'двести', 300 => 'триста', 400 => 'четыреста',
        500 => 'пятьсот', 600 => 'шестьсот', 700 => 'семьсот', 800 => 'восемьсот',
        900 => 'девятьсот'
    );
    $thousands = array(
        1000 => 'тысяча', 1000000 => 'миллион', 1000000000 => 'миллиард'
    );
    $text = '';
    if ($num < 0) {
        $text = 'минус ';
        $num = abs($num);
    }
    $num = number_format($num, 2, '.', '');
    $parts = explode('.', $num);
    $int_part = $parts[0];
    $dec_part = $parts[1];
    if ($int_part == 0) {
        $text .= $ones[0] . ' рублей';
    } else {
        $i = 0;
        $int_part = strrev($int_part);
        while (isset($thousands[pow(1000, $i)]) && $i < count($thousands)) {
            $thousand = $thousands[pow(1000, $i)];
            $num_part = substr($int_part, $i * 3, 3);
            $num_part = strrev($num_part);
            $hundred = isset($hundreds[$num_part[0] * 100]) ? $hundreds[$num_part[0] * 100] . ' ' : '';
            $ten = '';
            if ($num_part[1] == 1) {
                $ten = $tens[$num_part[1] * 10 + $num_part[0]];
            } else {
                $ten = isset($tens[$num_part[1] * 10]) ? $tens[$num_part[1] * 10] . ' ' : '';
                $one = isset($ones[$num_part[0]]) ? $ones[$num_part[0]] : '';
                $ten = $ten . $one;
            }
            $text_part = $hundred . $ten . ' ' . $thousand . ' ';
            $text = $text_part . $text;
            $i++;
        }
        $text .= 'рублей';
    }
    if ($dec_part > 0) {
        $dec_part = strrev($dec_part);
        $tens = '';
        if ($dec_part[1] == 1) {
            $tens = $tens[$dec_part[1] * 10 + $dec_part[0]];
        } else {
            $tens = isset($tens[$dec_part[1] * 10]) ? $tens[$dec_part[1] * 10] . ' ' : '';
            $ones = isset($ones[$dec_part[0]]) ? $ones[$dec_part[0]] : '';
            $tens = $tens . $ones;
        }
        $text .= ' ' . $tens . ' копеек';
    }
    return ucfirst($text);
}

$num = 1234.56;
$text = num2text($num);
echo $text; // выводит "Одна тысяча двести тридцать четыре рубля пятьдесят шесть копеек"