Loading:


    funkcja do zamiany liczby na jej słowną reprezentację

    Przykład działania:

    1 jeden
    2 dwa
    5 pięć
    10 dziesięć
    11 jedenaście
    17 siedemnaście
    20 dwadzieścia
    21 dwadzieścia jeden
    25 dwadzieścia pięć
    100 sto
    101 sto jeden
    102 sto dwa
    110 sto dziesięć
    111 sto jedenaście
    119 sto dziewiętnaście
    123 sto dwadzieścia trzy
    170 sto siedemdziesiąt
    1000 jeden tysiąc
    1001 jeden tysiąc jeden
    1010 jeden tysiąc dziesięć
    1111 jeden tysiąc sto jedenaście
    1125 jeden tysiąc sto dwadzieścia pięć
    6666 sześć tysięcy sześćset sześćdziesiąt sześć
    10000 dziesięć tysięcy
    10001 dziesięć tysięcy jeden
    10010 dziesięć tysięcy dziesięć
    12345 dwanaście tysięcy trzysta czterdzieści pięć
    100000 sto tysięcy
    100001 sto tysięcy jeden
    100011 sto tysięcy jedenaście
    120000 sto dwadzieścia tysięcy
    111111 sto jedenaście tysięcy sto jedenaście
    7654321 siedem milionów sześćset pięćdziesiąt cztery tysiące trzysta dwadzieścia jeden
    9876543 dziewięć milionów osiemset siedemdziesiąt sześć tysięcy pięćset czterdzieści trzy
    9000001 dziewięć milionów jeden
    9999999 dziewięć milionów dziewięćset dziewięćdziesiąt dziewięć tysięcy dziewięćset dziewięćdziesiąt dziewięć



    Napisz Artyku³

    Listing

    <?php
    /**
     * Rozszerza klasę num o dodatkowe funkcjonalności.
     *
     * @package helpers
     * @author Michał "phpion" Płonka
     */

    class num extends num_Core {
            /**
             * Zwraca słowną reprezentację liczby.
             *
             * Obsługuje liczby od 0 do 9999999.
             *
             * @param int $number Liczba.
             * @param string $imploder Ciag znaków jakim zostaną połączone ze sobą poszczególne segementy liczby.
             * @return string Słowna reprezentacja liczby.
             */

            public static function say($number, $imploder = ' ') {
                    $number = (int)$number;
                   
                    if ($number == 0) {
                            return 'zero';
                    }
                   
                    $levels = array(
                            '0' => array('', 'jeden', 'dwa', 'trzy', 'cztery', 'pięć', 'sześć', 'siedem', 'osiem', 'dziewięć'),
                            '0a' => array('', 'jedenaście', 'dwanaście', 'trzynaście', 'czternaście', 'piętnaście', 'szesnaście', 'siedemnaście', 'osiemnaście', 'dziewiętnaście'),
                            '1' => array('', 'dziesięć', 'dwadzieścia', 'trzydzieści', 'czterdzieści', 'pięćdziesiąt', 'sześćdziesiąt', 'siedemdziesiąt', 'osiemdziesiąt', 'dziewięćdziesiąt'),
                            '2' => array('', 'sto', 'dwieście', 'trzysta', 'czterysta', 'pięćset', 'sześćset', 'siedemset', 'osiemset', 'dziewięćset'),
                            '3' => array('', 'jeden tysiąc', 'dwa tysiące', 'trzy tysiące', 'cztery tysiące', 'pięć tysięcy', 'sześć tysięcy', 'siedem tysięcy', 'osiem tysięcy', 'dziewięć tysięcy'),
                            '3a' => array('', 'jedenaście tysięcy', 'dwanaście tysięcy', 'trzynaście tysięcy', 'czternaście tysięcy', 'piętnaście tysięcy', 'szesnaście tysięcy', 'siedemnaście tysięcy', 'osiemnaście tysięcy', 'dziewiętnaście tysięcy'),
                            '4' => array('', 'dziesięć tysięcy', 'dwadzieścia tysięcy', 'trzydzieści tysięcy', 'czterdzieści tysięcy', 'pięćdziesiąt tysięcy', 'sześćdziesiąt tysięcy', 'siedemdziesiąt tysięcy', 'osiemdziesiąt tysięcy', 'dziewięćdziesiąt tysięcy'),
                            '5' => array('', 'sto tysięcy', 'dwieście tysięcy', 'trzysta tysięcy', 'czterysta tysięcy', 'pięćset tysięcy', 'sześćset tysięcy', 'siedemset tysięcy', 'osiemset tysięcy', 'dziewięćset tysięcy'),
                            '6' => array('', 'jeden milion', 'dwa miliony', 'trzy miliony', 'cztery miliony', 'pięć milionów', 'sześć milionów', 'siedem milionów', 'osiem milionów', 'dziewięć milionów')
                    );
                   
                    $return = array();
                    $skip_next_level = FALSE;

                    $number = (string)$number;
                   
                    // Pętla przypisująca słowne odpowiedniki cyfrom na określonych miejscach.
                    for ($i=0, $strlen=strlen($number); $i<$strlen; $i++) {
                            if ($skip_next_level === TRUE) {
                                    $return[] = '';
                                    $skip_next_level = FALSE;
                                   
                                    continue;
                            }
                           
                            $l = $strlen - $i - 1;
                            $n = (int)$number[$i];
                           
                            if ($n == 1 && isset($levels[($l - 1).'a'])) {
                                    $next_number = (int)$number[$i + 1];
                                   
                                    if ($next_number != 0) {
                                            $l = ($l - 1).'a';
                                            $n = (int)$number[$i + 1];
                                    }
                                   
                                    $return[] = $levels[$l][(string)$n];
                                   
                                    $skip_next_level = TRUE;
                            }
                            else {
                                    $return[] = $levels[$l][(string)$n];
                            }
                    }
                    //
                   
                    // Usunięcie powtórzeń typu "sto tysięcy jedenaście tysięcy" do postaci "sto jedenaście tysięcy".
                    $c = 0;
                    $remove_after_space = FALSE;
                   
                    for ($i=$strlen-1; $i>=0; $i--) {
                            $strpos = strpos($return[$i], ' ');
                           
                            if ($strpos > 0) {
                                    if ($remove_after_space === TRUE) {
                                            $return[$i] = substr($return[$i], 0, $strpos);
                                    }
                                    else {
                                            $remove_after_space = TRUE;
                                    }
                            }
                           
                            if ($c == 2) {
                                    $remove_after_space = FALSE;
                                    $c = 0;
                            }
                            else {
                                    $c++;
                            }
                    }
                    //
                   
                    return implode($imploder, $return);
            }
    }




    Dodano przez: tyrael Ranga: 0 Punktów: 0
    Komentarze użytkowników
    Mało przydatne rozwiązanie ale warto wiedzieć jak wykonać.
    autor: croos22 | 12320 | 2011-03-06 10:29:35


      • Tre¶æ komentarza
        Kod do komentarza (opcjonalnie)
        PHP JavaScript MySQL Smarty SQL HTML CSS ActionScript
        Autor
        Token
        token

         

         








    funkcje.net
    Wszelkie prawa zastrzeżone©. | Funkcje.net 2008-2025 v.1.5 | design: diviXdesign & rainbowcolors