Pogčedajte punu verziju : Kako biste napravili ovu funkciju
Ilija Studen
19. 08. 2006., 02:47
Ništa preterano komplikovano, samo bih voleo da vidim i neku malo elegantniju implementaciju od bruteforce fje koju ću koristiti u prvom krugu.
Naime, funkcija treba da vratin INT(10) gde se cifre ne ponavljaju. Broj ne sme da počinje sa 0.
Tipa:
1234567890 - ok
1232........... - nok
bluesman
19. 08. 2006., 02:57
Što kažu najjednostavnija rešenja su najbolja :
$a = array("1","2","3","4","5","6","7","8","9","0");
$b = implode("", array_rand ($a, 10));
a pošto array_rand vraca keys, mozemo da imamo bilo kakav array $a od 10 elemenata, na primer:
$a = array("ilija","Pera","c","0","439349","djoka","dpt",12.34,"22","s");
samo uradi proveru da li je $b{0} == "0"
Ilija Studen
19. 08. 2006., 04:55
Samo manji problem koji sam naknadno našao. array_rand() ne osigurava da će se elementi rezultujućeg niza pojaviti samo jednom tj. ne garantuje unikatnost u ovom slučaju.
Ovu funkciju sam skuckao na brzaka:
/**
* This function will take input array and mix its elements
*
* @param array $mix_this
* @return array
*/
function array_mix($mix_this) {
if(!is_array($mix_this)) return $mix_this; // not an array
$mix_out = array();
$mix_in = $mix_this;
for($i = 0, $count = count($mix_in); $i < $count; $i++) {
$rand_key = array_rand($mix_in);
$mix_out[] = $mix_in[$rand_key];
unset($mix_in[$rand_key]);
} // for
return $mix_out;
} // array_mix
function rand_bez_ponavljanja() {
$a = array(0,1,2,3,4,5,6,7,8,9);
while ($a[0] == "0") shuffle($a);
return "".join($a);
}
Ilija Studen
19. 08. 2006., 15:50
Još sam se čudio kako nema funkcije koja će izmućkati niz. Super, jedna funkcija manje za održavanje!
By the way, mislim da je valjda poželjno da se pozove srand pre prvog poziva ove funkcije... Npr:
srand((float)microtime() * 1000000);
vBulletin® v3.6.8, Copyright ©2000-2024, Jelsoft Enterprises Ltd.