Avatar billede Slettet bruger
06. april 2006 - 10:14 Der er 8 kommentarer og
1 løsning

Random selection af 2 forskellige arrays

Hej eksperter, jeg har et array der indeholder nogen navne, og  et andet array der indeholder nogen positioner, jeg vil så tage et tilfældigt navn, og en tilfæædig position.
Altså f.eks. "Carsten" 390.

Men så må den jo ikke vælge Carsten og den position igen, skal jeg så lave et andet array, der indholder de der er brugt, eller er der et letter måde?


Script:
$namesArr = array("Bent", "Carsten", "Mikkel", "Anders");
$posArr = array(103, 105, 215, 390);

Håber I kan hjælpe mig og forstår hvad jeg mener.
Avatar billede morhan Novice
06. april 2006 - 10:37 #1
en metode kunne være, at lave to arrays, som benyttes til at indexere names og pos


$namesArr = array("Bent", "Carsten", "Mikkel", "Anders");
$posArr = array(103, 105, 215, 390);

$ubound = count($namesArr)-1;

$rndNamesArr = range(0, $ubound); // index 0,1,2,3
$rndPosArr = range(0, $ubound);

shuffle($rndNamesArr); // bland indexværdierne
shuffle($rndPosArr);

for($i=0; $i <= $ubound; $i++){
    echo "name=".$namesArr[$rndNamesArr[$i]]." pos=".$posArr[$rndPosArr[$i]]."<br>";
}
Avatar billede Slettet bruger
06. april 2006 - 10:51 #2
Men hvordan sikre jeg mig så at den ikke vælger den samme 2 gange?
Avatar billede Slettet bruger
06. april 2006 - 10:51 #3
Ellers god bud.
Avatar billede coderdk Praktikant
06. april 2006 - 11:28 #4
Hvorfor ikke bare:

$namesArr = array("Bent", "Carsten", "Mikkel", "Anders");
$posArr = array(103, 105, 215, 390);
shuffle( $namesArr );
shuffle( $posArr );
$n = count( $namesArr );
for ( $i = 0; $i < $n; $i++ )
{
  echo "$namesArr[$i] $posArr[$i]<br>";
}

Hvis du bare tager dem fra en ende af, så vælger den jo ikke de samme igen. Eller mener du noget helt andet?
Avatar billede Slettet bruger
06. april 2006 - 14:10 #5
Hvad nu hvis jeg skal bruge 3 positioner til hver enkelt navn?
altså hvis det nu er at $posArr er meget længere:
$posArr =  array(103, 105, 215, 390, 350, 1738, 2350, 230, -20, 51, 15, 32, 64, 8, 900, 3000, 3500);
Avatar billede coderdk Praktikant
06. april 2006 - 14:28 #6
$namesArr = array("Bent", "Carsten", "Mikkel", "Anders");
$posArr = array(103, 105, 215, 390);
shuffle( $namesArr );
shuffle( $posArr );
$n = count( $namesArr );
$c = 0;
for ( $i = 0; $i < $n; $i++ )
{
  echo "$namesArr[$i] ";
  for ( $a = 0; $a < 3; $a++ )
  {
    echo "$posArr[$c] ";
    $c++;
  }
  echo "<br>";
}

Men så skal antallet af positioner være tre gange antallet af personer... :P
Avatar billede coderdk Praktikant
06. april 2006 - 14:29 #7
(Glemte at kopiere din $posArr)
Avatar billede Slettet bruger
10. august 2006 - 08:54 #8
Tak for hjælpen begge 2, men vil sige coderdk's svar var bedst... til det jeg skulle bruge...
Lægger du et svar?
Avatar billede coderdk Praktikant
10. august 2006 - 12:43 #9
Yessir :)
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