Pagina 1 din 1
Numar aleator cu cifre distincte
Scris: Joi Mai 17, 2012
de Komfort
buna ziua
Asi dori sa aflu cum pot genera un nr la intamplate cu rand(), cu cifre distincte ?
Multumesc
Numar aleator cu cifre distincte
Scris: Joi Mai 17, 2012
de MarPlo
Salut
Din documentatia de la PHP, functia
mt_rand() e mai rapida decat
rand() .
Daca vrei sa obtii un numar aleator cuprins intre un minim si maxim, poti folosi asa:
Cod: Selectaţi tot
$min = 123;
$max = 123456;
echo mt_rand($min, $max);
Daca vrei un numar aleator dintr-o lista de numere create intr-un array, poti folosi
array_rand() , ca in acest exemplu:
Cod: Selectaţi tot
$nrs = array(123, 345, 67, 894, 673, 128, 9864, 3678, 654);
$nr = $nrs[array_rand($nrs)];
echo $nr;
Numar aleator cu cifre distincte
Scris: Joi Mai 17, 2012
de Komfort
Da dar...ma refer la generarea unui numar de 4 cifre rand(1000,9999); problema e ca ar putea sa-mi dea si un numar cu 2 sau 3 sau cu toate 4 cifre la fel.
Eu vreau distincte intre ele. Multumesc.
Edit:
Am adaugat intrun array 9000 de numere, oare sa fie vreo problema in a extrage unul aleator din el, cu:
Gata am rezolvat.
Multumesc.
Numar aleator cu cifre distincte
Scris: Joi Mai 17, 2012
de MarPlo
Se poate folosi si urmatoarea functie, daca vrei un cod mai compact, si sa obtii numarul intre un $minim si $maxim.
Cod: Selectaţi tot
<?php
// function to get aleator number with no repeat digits ( www.coursesweb.net )
// returns an aleator number between $min and $max, with distinct digits
function getDistinctNr($min, $max) {
$nrstr = (string) mt_rand($min, $max); // get aleator number, converted into string
$n_nr = strlen($nrstr); // number of characters
$setnr = array(); // to store distinct digits that will form the returned number
// traverse $nrstr to add in $setnr its distinct digits
// if number already in $setnr, traverse 0 to 9 to define another distinct number
for($i=0; $i<$n_nr; $i++) {
if(!in_array($nrstr[$i], $setnr)) $setnr[] = $nrstr[$i];
else {
for($i2=0; $i2<10; $i2++) {
if(!in_array($i2, $setnr)) {
$setnr[] = $i2;
break;
}
}
}
}
return implode('', $setnr);
}
// Test
$nr = getDistinctNr(1000, 9999);
echo $nr;
?>