Вывести любое число прописью

Как обычно создадим сниппет например num2strRu и поместим туда код:

$num=intval($number);
// Все варианты написания чисел прописью от 0 до 999 скомпануем в один небольшой массив
$m = [
    ['ноль'],
    ['-', 'один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять'],
    ['десять', 'одиннадцать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать'],
    ['-', '-', 'двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто'],
    ['-', 'сто', 'двести', 'триста', 'четыреста', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот'],
    ['-', 'одна', 'две']
];

// Все варианты написания разрядов прописью скомпануем в один небольшой массив
$r = [
    ['...ллион', '', 'а', 'ов'], // используется для всех неизвестно больших разрядов
    ['тысяч', 'а', 'и', ''],
    ['миллион', '', 'а', 'ов'],
    ['миллиард', '', 'а', 'ов'],
    ['триллион', '', 'а', 'ов'],
    ['квадриллион', '', 'а', 'ов'],
    ['квинтиллион', '', 'а', 'ов']
    // ,array(... список можно продолжить
];

if ($num == 0) return $m[0][0]; // Если число ноль, сразу сообщить об этом и выйти
$o = []; // Сюда записываем все получаемые результаты преобразования

// Разложим исходное число на несколько трехзначных чисел и каждое полученное такое число обработаем отдельно
foreach (array_reverse(str_split(str_pad($num, ceil(strlen($num) / 3) * 3, '0', STR_PAD_LEFT), 3)) as $k => $p) {
    $o[$k] = [];

    // Алгоритм, преобразующий трехзначное число в строку прописью
    foreach ($n = str_split($p) as $kk => $pp)
        if (!$pp) continue; else
            switch ($kk) {
                case 0:
                    $o[$k][] = $m[4][$pp];
                    break;
                case 1:
                    if ($pp == 1) {
                        $o[$k][] = $m[2][$n[2]];
                        break 2;
                    } else $o[$k][] = $m[3][$pp];
                    break;
                case 2:
                    if (($k == 1) && ($pp <= 2)) $o[$k][] = $m[5][$pp]; else $o[$k][] = $m[1][$pp];
                    break;
            }
    $p *= 1;
    if (!$r[$k]) $r[$k] = reset($r);

    // Алгоритм, добавляющий разряд, учитывающий окончание руского языка
    if ($p && $k)switch (true) {
        case preg_match("/^[1]$|^\d*[0,2-9][1]$/", $p):
            $o[$k][] = $r[$k][0] . $r[$k][1];
            break;
        case preg_match("/^[2-4]$|\d*[0,2-9][2-4]$/", $p):
            $o[$k][] = $r[$k][0] . $r[$k][2];
            break;
        default:
            $o[$k][] = $r[$k][0] . $r[$k][3];
            break;
    }
    $o[$k] = implode(' ', $o[$k]);
}

return implode(' ', array_reverse($o));

 Использовать можно так:

[[!num2strRu?number=125]]

Понятно, что вместо числа, можно отправить в сниппет любую переменную, которая содержит число.

Взято здесь