Autor Zpráva
MyShare
Profil
Zdravím,
na úvod upozorňujem v php som začiatočník-samouk :)
potrebujem pomôcť s generovaním čísiel v php tak aby výsledok bol
xxxx-xxxx-xxxx-xxxx

Neviem ako to dať dokopy pozeral som aj google aj php.net ale nenašiel som presne to čo potrebujem.

Môj pokus:
<?php

    $random_number = intval( "0" . rand(1,9) . '-' . rand(0,9) . '-' . rand(0,9) . '-' . rand(0,9) . '-' . rand(0,9) ); // random(ish) 5 digit int

        print($random_number);
    ?>

Všetky Ďakujem za odpoveď.
juriad
Profil
Výsledkem nemá být číslo, ale řetězec.
Ty x značí libovolnou číslici od 0 do 9?

Třeba to jde takto (od PHP 5.3):
preg_replace_callback('/x/', function($matches) {return rand(0, 9);}, 'xxxx-xxxx-xxxx-xxxx');
MyShare
Profil
juriad:
Ďakujem presne čo som potreboval
Dan Charousek
Profil
Tohle je moc konkrétní, jestli jsou na všech místech 4místná číslá, tak můžeš 4x vygenerovat náhodné číslo od 1000 do 9999 a slepit je. Další možností by bylo generovat náhodně číslo po čísle a po x-tém čísle vložit separátor:

<?php

function getRandString($chars, $length, $groups = null, $groupsSeparator = "") {
    
    $groups            = empty($groups) ? $length : $groups;
    $resultArray    = array();
    $string            = "";
    
    for($a = 1; $a <= $length; $a++) {
        
        $string .= $chars[rand(0, count($chars) - 1)];
        
        if($a % $groups == 0) {
            $resultArray[] = $string;
            $string = "";
        }
        
    }

    return implode($groupsSeparator, $resultArray);
    
}

echo getRandString(range(0,9), 16, 4, "-");

?>

juriadův příklad bude pro čísla asi nejjednodušší.
MyShare
Profil
juriad:
Ešte som sa ta chcel spýtať prečo je v tom kóde ($matches) keď nieje nikde uvedené čo ten kód znemená?
Myslím tým, že nemal by kód vyzerať potom takto?

$matches = niečo sem;
preg_replace_callback('/x/', function($matches) {return rand(0, 9);}, 'xxxx-xxxx-xxxx-xxxx');

Dúfam, že sa pochopíme. Nejde mi to do hlavy tak sa radšej poinformujem.
Joker
Profil
MyShare:
Myslím tým, že nemal by kód vyzerať potom takto?
Neměl, $matches je vstupní parametr funkce. Hodnotu $matches pokaždé doplní ten preg_replace_callback.
Pro začátečníka může být preg_replace_callback trochu složitější na pochopení.
Keeehi
Profil
MyShare:
preg_replace_callback potřebuje, abychom mu dodali funkci s jedním parametrem. Proto tam je. Nás ale nezajímá, co nám preg_replace_callback posílá, protože mu chceme vždy vrátit jen náhodné číslo. A když nás to nezajímá, tak s tou proměnnou nepracujeme a proto se nikde neobjevuje.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0