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()
rand() hjälp
13 svar · 256 visningar · startad av greymane
Något sånt här?
<?php
srand ( ( double ) microtime () + 1000000 );
for ( $i = 0; $i < 5; $i++ )
$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. --
är det garanterat att jag inte får några dubbletter då?
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. --
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
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. --
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]
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. --
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!
nån kan väl? jag behöver hjälp!
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]
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?
$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]
kanon! nu fick jag rätt på det! tackar :)