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

0

Я пытаюсь создать мастер формы для этого, мне нужен прогресс класса - сначала, прогресс - второй, прогресс - третий и т.д. ,

данные были получены из базы данных, я поместил этот мастер div в цикл и имел одну переменную $ i, которая увеличивалась как 1,2,3,4,5

Поэтому мой вопрос заключается в том, как преобразовать 1 = сначала, 2 = второй, 3 = третий, 4 = четвертый и т.д. ,

Я нашел много решений, которые они конвертируют как 1 = один, 2 = два, как этот. ,

  • 0
    snipplr.com/view/39427
  • 0
    Hiii .. я думаю, что эта ссылка может вам помочь .. stackoverflow.com/questions/277569/… Измените значения массива в коде как первый, второй, третий и т. Д .... и я думаю, что это работает для вас попробуй ..
Показать ещё 4 комментария
Теги:
loops

3 ответа

2
Лучший ответ

Вы можете попробовать это.

function createFullWordOrdinal($number)
{
    $ord1     = array(1 => "first", 2 => "second", 3 => "third", 5 => "fifth", 8 => "eight", 9 => "ninth", 11 => "eleventh", 12 => "twelfth", 13 => "thirteenth", 14 => "fourteenth", 15 => "fifteenth", 16 => "sixteenth", 17 => "seventeenth", 18 => "eighteenth", 19 => "nineteenth");
    $num1     = array("zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eightteen", "nineteen");
    $num10    = array("zero", "ten", "twenty", "thirty", "fourty", "fifty", "sixty", "seventy", "eighty", "ninety");
    $places   = array(2 => "hundred", 3 => "thousand", 6 => "million", 9 => "billion", 12 => "trillion", 15 => "quadrillion", 18 => "quintillion", 21 => "sextillion", 24 => "septillion", 27 => "octillion");

    $number = array_reverse(str_split($number));

    if ($number[0] == 0) 
    {
        if ($number[1] >= 2)
            $out = str_replace("y", "ieth", $num10[$number[1]]);
        else
            $out = $num10[$number[1]]."th";
    } 
    else if (isset($number[1]) && $number[1] == 1) 
    {
        $out = $ord1[$number[1] . $number[0]];
    } 
    else 
    {
        if (array_key_exists($number[0], $ord1))
            $out = $ord1[$number[0]];
        else
            $out = $num1[$number[0]]."th";
    }

    if((isset($number[0]) && $number[0] == 0) || (isset($number[1]) && $number[1] == 1))
    {
        $i = 2;
    } 
    else 
    {
        $i = 1;
    }

    while ($i < count($number)) 
    {
        if ($i == 1) 
        {
            $out = $num10[$number[$i]] . " " . $out;
            $i++;
        } 
        else if ($i == 2) 
        {
            $out = $num1[$number[$i]] . " hundred " . $out;
            $i++;
        } 
        else 
        {
            if (isset($number[$i + 2])) 
            {
                $tmp = $num1[$number[$i + 2]] . " hundred ";
                $tmpnum = $number[$i + 1].$number[$i];
                if ($tmpnum < 20)
                    $tmp .= $num1[$tmpnum] . " " . $places[$i] . " ";
                else
                    $tmp .= $num10[$number[$i + 1]] . " " . $num1[$number[$i]] . " " . $places[$i] . " ";

                $out = $tmp . $out;
                $i+=3;
            } 
            else if (isset($number[$i + 1])) 
            {
                $tmpnum = $number[$i + 1].$number[$i];
                if ($tmpnum < 20)
                    $out = $num1[$tmpnum] . " " . $places[$i] . " " . $out;
                else
                    $out = $num10[$number[$i + 1]] . " " . $num1[$number[$i]] . " " . $places[$i] . " " . $out;
                $i+=2;
            } 
            else 
            {
                $out = $num1[$number[$i]] . " " . $places[$i] . " " . $out;
                $i++;
            }
        }
    }
    return $out;
}

Это даст вам результат, который вы хотите.

createFullWordOrdinal(1) ----> first
createFullWordOrdinal(2) ----> second
createFullWordOrdinal(3) ----> third
createFullWordOrdinal(4) ----> fourth
  • 0
    Упс пропустил. @ h2ooooooo Хороший улов .. Обновлено
0

Для преобразования 1 = сначала, 2 = второй... попробуйте эту функцию

 function stringifyNumber($n) {
    $special = ['zeroth','first', 'second', 'third', 'fourth', 'fifth', 'sixth', 'seventh', 'eighth', 'ninth', 'tenth', 'eleventh', 'twelfth', 'thirteenth', 'fourteenth', 'fifteenth', 'sixteenth', 'seventeenth', 'eighteenth', 'nineteenth'];
    $deca = ['twent', 'thirt', 'fort', 'fift', 'sixt', 'sevent', 'eight', 'ninet'];
    if ($n < 20) return $special[$n];
        if ($n%10 === 0) return $deca[round($n/10,0)-2] . 'ieth';
        return $deca[round($n/10,0)-2] . 'y-' . $special[$n%10];
}



echo $number=stringifyNumber($number);
0

Если вы хотите преобразовать число в такие слова:

564: пятьсот шестьдесят четыре

затем используйте эту функцию для преобразования числа в слова

function convert_number_to_words ($ number) {

$hyphen      = '-';
$conjunction = ' and ';
$separator   = ', ';
$negative    = 'negative ';
$decimal     = ' point ';
$dictionary  = array(
    0                   => 'zero',
    1                   => 'one',
    2                   => 'two',
    3                   => 'three',
    4                   => 'four',
    5                   => 'five',
    6                   => 'six',
    7                   => 'seven',
    8                   => 'eight',
    9                   => 'nine',
    10                  => 'ten',
    11                  => 'eleven',
    12                  => 'twelve',
    13                  => 'thirteen',
    14                  => 'fourteen',
    15                  => 'fifteen',
    16                  => 'sixteen',
    17                  => 'seventeen',
    18                  => 'eighteen',
    19                  => 'nineteen',
    20                  => 'twenty',
    30                  => 'thirty',
    40                  => 'fourty',
    50                  => 'fifty',
    60                  => 'sixty',
    70                  => 'seventy',
    80                  => 'eighty',
    90                  => 'ninety',
    100                 => 'hundred',
    1000                => 'thousand',
    1000000             => 'million',
    1000000000          => 'billion',
    1000000000000       => 'trillion',
    1000000000000000    => 'quadrillion',
    1000000000000000000 => 'quintillion'
);

if (!is_numeric($number)) {
    return false;
}

if (($number >= 0 && (int) $number < 0) || (int) $number < 0 - PHP_INT_MAX) {
    // overflow
    trigger_error(
        'convert_number_to_words only accepts numbers between -' . PHP_INT_MAX . ' and ' . PHP_INT_MAX,
        E_USER_WARNING
    );
    return false;
}

if ($number < 0) {
    return $negative . convert_number_to_words(abs($number));
}

$string = $fraction = null;

if (strpos($number, '.') !== false) {
    list($number, $fraction) = explode('.', $number);
}

switch (true) {
    case $number < 21:
        $string = $dictionary[$number];
        break;
    case $number < 100:
        $tens   = ((int) ($number / 10)) * 10;
        $units  = $number % 10;
        $string = $dictionary[$tens];
        if ($units) {
            $string .= $hyphen . $dictionary[$units];
        }
        break;
    case $number < 1000:
        $hundreds  = $number / 100;
        $remainder = $number % 100;
        $string = $dictionary[$hundreds] . ' ' . $dictionary[100];
        if ($remainder) {
            $string .= $conjunction . convert_number_to_words($remainder);
        }
        break;
    default:
        $baseUnit = pow(1000, floor(log($number, 1000)));
        $numBaseUnits = (int) ($number / $baseUnit);
        $remainder = $number % $baseUnit;
        $string = convert_number_to_words($numBaseUnits) . ' ' . $dictionary[$baseUnit];
        if ($remainder) {
            $string .= $remainder < 100 ? $conjunction : $separator;
            $string .= convert_number_to_words($remainder);
        }
        break;
}

if (null !== $fraction && is_numeric($fraction)) {
    $string .= $decimal;
    $words = array();
    foreach (str_split((string) $fraction) as $number) {
        $words[] = $dictionary[$number];
    }
    $string .= implode(' ', $words);
}

return $string;

}

Вывод::

echo convert_number_to_words (123456789);

//Сто двадцать три миллиона четыреста пятьдесят шесть тысяч семьсот восемьдесят девять

  • 0
    Пожалуйста, не копируйте и не вставляйте чужой код, а заявляйте, что он ваш. Это упомянуто здесь в 2011 году и здесь в 2013 году. При этом ОП хотел "первое" и "второе", а не "один и" два ".
  • 0
    Эй, вы поняли это неправильно, поскольку я упомянул, что это преобразование числа в их конкретное слово .... и я обновляю здесь по этой ссылке ... ( karlrixon.co.uk/writing/convert-numbers-to- слова с php )

Ещё вопросы

Сообщество Overcoder
Наверх
Меню