Avatar billede sesam Nybegynder
18. juni 2008 - 12:52 Der er 15 kommentarer og
2 løsninger

Unique værdi i array

Hej Eksperter,
Jeg kan simpelthen ikke knække den her...

Jeg vil gerne ha et array med 3 random generede unikke værdier/tal mellem 1 og 9.

$randomNumber = rand("1", "9");

Derefter vil jeg gerne ha' værdierne gemt i et array fx.:

$num[3]
$num[9]
$num[2]

Der må ikke forekomme den samme værdi/tal i arrayet... Er det muligt?
Avatar billede w13 Novice
18. juni 2008 - 13:16 #1
Nej, det er helt umuligt!

Medmindre du bruger denne kode:

$num=range(1,9);
shuffle($num);
$num=array_slice($num,0,3);

:)
Avatar billede w13 Novice
18. juni 2008 - 13:17 #2
$num=range(1,9);
- opretter et array med tallene 1-9.

shuffle($num);
- blander tallene.

$num=array_slice($num,0,3);
- tager de 3 første tal.
Avatar billede w13 Novice
18. juni 2008 - 13:18 #3
Hvis du synes, det er fedt, kan du selvfølgelig også bare skrive:

$num=array_slice(shuffle(range(1,9)),0,3);
Avatar billede pkdkk Nybegynder
18. juni 2008 - 13:20 #4
Den kan også løses sådan her: :)

    $num = array();
   
    for($i=0;sizeof($num)<3;$i++) {
        $randomNumber = rand(1,9);
       
        if(!array_key_exists($randomNumber,$num)) {
            $num[$randomNumber] = "";
        }
    }
Avatar billede pkdkk Nybegynder
18. juni 2008 - 13:21 #5
Du kan udskrive arrayet $num  ved at skrive

print_r($num);
Avatar billede sesam Nybegynder
18. juni 2008 - 13:39 #6
pkdkk >> er det muligt at smide et index på de tre værdier i arrayet? Så jeg kan referere til dem?

echo $num[1];
echo $num[2];
echo $num[3];
Avatar billede pkdkk Nybegynder
18. juni 2008 - 13:41 #7
Så tror jeg det er det her du mener.. :)

    $num = array();
 
    for($i=0;sizeof($num)<3;$i++) {
        $randomNumber = rand(1,9);
     
        if(!in_array($randomNumber,$num)) {
            $num[] = $randomNumber;
        }
    }
Avatar billede w13 Novice
18. juni 2008 - 13:42 #8
Ville det ikke være at foretrække at undgå løkker og if-sætninger?

Med de 3 linjer, jeg skrev, indekseres det jo automatisk.
Avatar billede pkdkk Nybegynder
18. juni 2008 - 13:53 #9
w13 >> Din måde er smart, kendte ikke til alle de php funktioner. :)
Avatar billede pkdkk Nybegynder
18. juni 2008 - 14:01 #10
Tror måske min måde er lidt nemmere at se hvad der sker :),
Avatar billede w13 Novice
18. juni 2008 - 14:07 #11
Det kunne så kombineres med de kommentarer, jeg skrev under. ;)
Avatar billede soerenlyn Nybegynder
18. juni 2008 - 14:15 #12
sesam --> Standard er at man 0-indekserer arrays, så det ville være "normalt" at trække index 0-2 ud frem for 1-3. Pkdkk's kode lægger også tallene på plads 0-2. Derudover vil jeg sige at w13's kode er bedre. Den er kortere, om den er overskuelig er en smagssag (jeg vil mene den er mere overskuelig), og den er hurtigere. Pkdkk's kode udtrækker et tilfældigt tal 3 gange, hvilket er langsommere end w13's måde hvor han bare genererer arrayet med alle 9 tal, derudover tjekker pkdkk's kode 3 gange om tallet allerede findes, hvilken (efter arrays størrelse) også tager en del tid..

Men nu er der nok kogt nok suppe på den simple funktion :P
Avatar billede sesam Nybegynder
18. juni 2008 - 14:16 #13
Takker jer begge mang gange for svar :O)
Avatar billede sesam Nybegynder
18. juni 2008 - 14:18 #14
hehe - tak Soeren for din kommentar...
Avatar billede soerenlyn Nybegynder
18. juni 2008 - 14:18 #15
Derudover vil det (næsten) altid være at foretrække at bruge det aktuelle programmeringssprogs indbyggede funktioner, da de er lavet af folk der kender sprogets implentering, og dermed kender den hurtigste måde at udføre en handling på.
Avatar billede w13 Novice
18. juni 2008 - 14:24 #16
Tak for point! ;)
Avatar billede pkdkk Nybegynder
20. juni 2008 - 08:26 #17
Så blev jeg os klogere .. :), Det altid rart..
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