webForumDet fria alternativet

rand() hjälp

13 svar · 256 visningar · startad av greymane

greymaneMedlem sedan juli 2001711 inlägg
#1

jag ska slumpa 5 tal mellan 1 o 100. det måste vara 5 unika tal. hur gör jag det? jag använder mt_rand()

SPiNMedlem sedan mars 20007 896 inlägg
#2

Något sånt här?

<?php
srand ( ( double ) microtime () + 1000000 );

for ( $i = 0; $i < 5; $i++ )
&nbsp; $unika[$i] = rand ( 1, 100 );
?>

------------------
SPiN, bjorne.w@telia.com

-- Wise men talk because they have something to say; fools, because they have to say something. --

greymaneMedlem sedan juli 2001711 inlägg
#3

är det garanterat att jag inte får några dubbletter då?

SPiNMedlem sedan mars 20007 896 inlägg
#4

Ja, det ska det vara. Det går inte att få mer random. Du ska alltid ta microtime()+1000000 för att det ska bli så mycket random som möjligt. Inte mer och inte mindre, en miljon är standard. :)

------------------
SPiN, bjorne.w@telia.com

-- Wise men talk because they have something to say; fools, because they have to say something. --

cmkMedlem sedan mars 2001325 inlägg
#5

Kan man inte göra en funktion som kollar om man redan har slumpat fram en siffra och i så fall slumpa fram en ny, då skulle man kunna känna sig säker jö :)

/Marty

------------------
Keep on rocking 24-7

SPiNMedlem sedan mars 20007 896 inlägg
#6

Det känns som att det är för mycket jobb, det är ju trots allt endast fem nummer som ska slumpas fram. :)

Med raderna kod som jag visade kommer dessa nummer garanterat (?) vara olika. :)

------------------
SPiN, bjorne.w@telia.com

-- Wise men talk because they have something to say; fools, because they have to say something. --

greymaneMedlem sedan juli 2001711 inlägg
#7

SPiN> om man reloadar ska det ju komma nya siffror... varför inte? det måste det ju göra.

[Redigerat av greymane den 09 jan 2002]

SPiNMedlem sedan mars 20007 896 inlägg
#8

Gör det inte det? Jag vet faktiskt inte varför... De kanske kopplas till den aktuella sessionen, men det låter ju konstigt.

------------------
SPiN, bjorne.w@telia.com

-- Wise men talk because they have something to say; fools, because they have to say something. --

greymaneMedlem sedan juli 2001711 inlägg
#9

SPiN> Om jag ändrar intervallet inom vilket talen plockas från, kommer nya tal fram. ändrar jag tillbaka till det gamla intervallet, kommer de gamla siffrorna fram igen :) skumt!

greymaneMedlem sedan juli 2001711 inlägg
#10

nån kan väl? jag behöver hjälp!

MatteMedlem sedan aug. 20002 975 inlägg
#11

Prova med gånger istället för plus:

srand ( ( double ) microtime () * 1000000 );

En annan sak är att slumptalen inte kommer att bli unika.

Jämför:

srand ( ( double ) microtime () * 1000000 );
for ( $i = 0; $i < 100; $i++ ){
  $unika[$i] = rand ( 1, 100 );
}
$tal=array_count_values ($unika);
ksort($tal);
while (list ($key, $val) = each ($tal)) { 
echo "$key => $val<br>\n"; }

med:

srand ( ( double ) microtime () * 1000000 );
$unika[] = rand ( 1, 100 );
while (sizeof($unika)<100){
	$testrand = rand ( 1, 100 );
	if (!in_array($testrand,$unika)){
		$unika[] = $testrand;}
}
$tal=array_count_values ($unika);
ksort($tal);
while (list ($key, $val) = each ($tal)) { 
echo "$key => $val<br>\n"; }

------------------
Fiskesällskapet Salamander

[Redigerat av Matte den 12 jan 2002]

greymaneMedlem sedan juli 2001711 inlägg
#12

matte> Jag va inte riktigt med på den sista kodsnutten... när jag körde den skrev den ut

1 => 1
2 => 1
3 => 1
osv...

tyvärr kan jag inte rätta till det själv då koden överstiger mina kunskaper. vad e fel?

MatteMedlem sedan aug. 20002 975 inlägg
#13

$tal=array_count_values ($unika); //Räknar ut hur många identiska värde det finns i arrayen och lägger dom i en ny array där nyckeln är värdet i den ursprungliga arrayen och värdet är antalet träffar.

ksort($tal); // sorterar arrayen.

while (list ($key, $val) = each ($tal)) {
echo "$key => $val<br>\n"; } // skriver ut en lista på Nyckel och Värde med texten ' => ' emellan.

Står det till exempel 4 => 2, så betyder det att värdet 4 finns två gånger i arrayen.

Vad jag menade var att för att få en array med unika värden får du använda något liknande det här:

srand ( ( double ) microtime () * 1000000 );
$unika[] = rand ( 1, 100 );
while (sizeof($unika)<5){
$testrand = rand ( 1, 100 );
if (!in_array($testrand,$unika)){
$unika[] = $testrand;}
}

------------------
Fiskesällskapet Salamander

[Redigerat av Matte den 12 jan 2002]

greymaneMedlem sedan juli 2001711 inlägg
#14

kanon! nu fick jag rätt på det! tackar :)

129 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)