Avatar billede r.hegaard Nybegynder
21. juli 2004 - 18:07 Der er 16 kommentarer og
1 løsning

x antal forskellige tilfældige tal

Hvordan laver jeg lettest x antal forskellige tilfældige heltal i en array ??
Avatar billede detox Nybegynder
21. juli 2004 - 18:17 #1
Fx:

function randomize($antal) {
    $arr = range(1, $antal);
    shuffle($arr);
    return $arr;
}

$arr = randomize(30);
foreach($arr as $val) {
    echo $val . "<br />";
}
Avatar billede r.hegaard Nybegynder
21. juli 2004 - 18:25 #2
Tak for det.
Kan jeg også få dig til at fortælle hvad det gør, samt lægge et svar ??
Avatar billede r.hegaard Nybegynder
21. juli 2004 - 18:44 #3
Jeg kan ikke umiddelbart få koden til at virke. Den giver samme rækkefølge hver gang jeg kører koden.
Avatar billede erikjacobsen Ekspert
21. juli 2004 - 18:59 #4
Hvilken PHP version kører du med? Er den for gammel skal du gøre 2 ting:
1) Bruge een gang: srand((double)microtime()*1000000)
2) Skifte din PHP ud.
Avatar billede r.hegaard Nybegynder
21. juli 2004 - 19:04 #5
Jeg kører PHP Version 4.2.3 på min egen server og PHP Version 4.2.2 ved min udbyder. Er det godt nok ??
Avatar billede erikjacobsen Ekspert
21. juli 2004 - 19:25 #6
Ja ;)
Det lyder fornuftigt. Så burde den også give forskellige resultater. I versioner
før PHP 4.2.0 ville den give samme resultat hver gang.

Hjælper 1) så?
Avatar billede r.hegaard Nybegynder
21. juli 2004 - 19:38 #7
Nej, det virker desværre ikke, hvis din kode skal indtastes før, så den samlede kode bliver følgende:
<?
srand((double)microtime()*1000000);

function randomize($antal) {
    $arr = range(1, $antal);
    shuffle($arr);
    return $arr;
}

$arr = randomize(30);
foreach($arr as $val) {
    echo $val . "-";
}
?>

Så giver den følgende resultat hver gang:
14-2-18-17-10-26-1-25-13-22-6-27-9-21-5-29-15-19-3-30-11-23-7-28-16-20-4-24-12-8-
Tallene 27, 28 og 29 skifter plads hver gang, rester holder præcis samme rækkefølge.
Hvis jeg fjerner srand((double)microtime()*1000000);, så bytter 27, 28 og 29 ikke længere plads.
Avatar billede erikjacobsen Ekspert
21. juli 2004 - 20:11 #8
Ok, shuffle har ikke haft det bedste ry. I versionerne som man bør køre med, så
tæt på 4.3.8 som muligt, er shuffle blevet forbedret. Det er nok derfor.
Hvorfor kører dit webhotel med en lidt alderssvækket PHP?

Men ok, så bytter vi bare selv rundt på dem. 2 secs.
Avatar billede erikjacobsen Ekspert
21. juli 2004 - 20:14 #9
function randomize($antal) {
    $arr = range(1, $antal);
    for ($i=0;$i<count($arr);$i++) {
      $x=rand(0,count($arr)-1);
      $tmp=$arr[$x];
      $arr[$x]=$arr[$i];
      $arr[$i]=$tmp;
    }
    return $arr;
}
Avatar billede r.hegaard Nybegynder
21. juli 2004 - 21:01 #10
erikjacobsen> Ja, så virker det. Tak for hjælpen.
Jeg ved ikke hvorfor mit Webhotel (B-one) bruger en gammel version af php, men jeg ved godt at de ikke altid har de nyeste ting.
Kan du kort forklare hvad det er koden gør, samt lægge et svar ??

detox> Vil du også lægge et svar ??
Avatar billede erikjacobsen Ekspert
21. juli 2004 - 21:09 #11
Nej, jeg vil ikke lægge et svar  -  jeg samler nemlig slet ikke på point.
Koden tager dit array, et element af gangen, og bytter med et andet, tilfældigt sted.
På den måde bliver det blandet.
Avatar billede r.hegaard Nybegynder
21. juli 2004 - 21:11 #12
OK, tak for hjælpen så.
Avatar billede detox Nybegynder
05. august 2004 - 16:03 #13
Husk at lukke spørgsmålet
Avatar billede r.hegaard Nybegynder
05. august 2004 - 16:59 #14
Jeg har ikke glemt det, men jeg venter på svar fra jer......
Avatar billede r.hegaard Nybegynder
08. august 2004 - 19:41 #15
Er I sikkere på, at I ikke vil have nogle point ??
Avatar billede detox Nybegynder
08. august 2004 - 22:06 #16
Ja, ikke denne gang ;o)
Avatar billede r.hegaard Nybegynder
08. august 2004 - 22:17 #17
OK. Tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester