PDA

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

Alef
19. 08. 2006., 08:43
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!

Alef
19. 08. 2006., 17:10
By the way, mislim da je valjda poželjno da se pozove srand pre prvog poziva ove funkcije... Npr:

srand((float)microtime() * 1000000);