---
title: "rand() hjälp"
type: "forum-thread"
url: "https://www.webforum.nu/amne/php/16568-rand-hjälp"
topic: "PHP"
topic_url: "https://www.webforum.nu/amne/php"
author: "greymane"
published: "2002-01-08T16:31:00.000Z"
updated: "2002-01-12T18:44:00.000Z"
replies: 13
views: 259
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/php/16568-rand-hjälp"
---

# rand() hjälp

## #1 — greymane, 2002-01-08T16:31Z

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()

Permalänk: https://www.webforum.nu/p/16568

## #2 — SPiN, 2002-01-08T16:42Z

Något sånt här?

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

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

Permalänk: https://www.webforum.nu/p/325811

## #3 — greymane, 2002-01-08T21:56Z

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

Permalänk: https://www.webforum.nu/p/325812

## #4 — SPiN, 2002-01-08T21:59Z

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. :)

Permalänk: https://www.webforum.nu/p/325813

## #5 — cmk, 2002-01-09T07:37Z

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

Permalänk: https://www.webforum.nu/p/325814

## #6 — SPiN, 2002-01-09T11:23Z

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. :)

Permalänk: https://www.webforum.nu/p/325815

## #7 — greymane, 2002-01-09T20:22Z

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\]

Permalänk: https://www.webforum.nu/p/325816

## #8 — SPiN, 2002-01-09T20:51Z

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

Permalänk: https://www.webforum.nu/p/325817

## #9 — greymane, 2002-01-09T21:00Z

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!

Permalänk: https://www.webforum.nu/p/325818

## #10 — greymane, 2002-01-12T13:03Z

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

Permalänk: https://www.webforum.nu/p/325819

## #11 — Matte, 2002-01-12T14:11Z

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"; }
```

Permalänk: https://www.webforum.nu/p/325820

## #12 — greymane, 2002-01-12T15:14Z

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?

Permalänk: https://www.webforum.nu/p/325821

## #13 — Matte, 2002-01-12T15:35Z

$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;}
}
```

Permalänk: https://www.webforum.nu/p/325822

## #14 — greymane, 2002-01-12T18:44Z

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

Permalänk: https://www.webforum.nu/p/325823

---

Tråden på webben: https://www.webforum.nu/amne/php/16568-rand-hjälp
