Avatar billede dennism Nybegynder
13. februar 2006 - 19:28 Der er 10 kommentarer og
1 løsning

PHP: Omskrivning af for-løkke

Jeg sidder og arbejdet på et sudoku spil, og i den anledning har jeg f.eks. denne lille for-løkke:

for($sudoku[27]=random(); $sudoku[27]==$sudoku[7] || $sudoku[27]==$sudoku[8] || $sudoku[27]==$sudoku[9] || $sudoku[27]==$sudoku[16] || $sudoku[27]==$sudoku[17] || $sudoku[27]==$sudoku[18] || $sudoku[27]==$sudoku[25] || $sudoku[27]==$sudoku[26]; $sudoku[27]=random());

Jeg har utrolig mange af dem, og ville derfor gerne, hvis jeg kunne lave en funktion som gjorde det lidt nemmere for mig.


Hvis jeg f.eks. kaldte:
sudokurandom(27, 7, 8, 9, 16, 17, 18, 25, 26);

Så skal den selv vide, at den skal tage $sudoku[27] (første parameter) og random'e den inden den ikke indeholder det samme som $sudoku[7], $sudoku[8], $sudoku[9] osv.

Det første problem er bare, at jeg ikke ved hvor mange parametre jeg kalder funktionen med, da nogle f.eks. kun har tre parametre.

Håber I forstår mit problem, og at der er en snedig PHP-programmør som har en løsning på mit problem :)

(beklager, men jeg har ikke nogle point)
Avatar billede erikjacobsen Ekspert
13. februar 2006 - 19:37 #1
Kunne du leve med at kalde den som    sudokurandom(Array(27, 7, 8, 9, 16, 17, 18, 25, 26));    ?
Avatar billede erikjacobsen Ekspert
13. februar 2006 - 19:39 #2
Avatar billede dennism Nybegynder
13. februar 2006 - 20:05 #3
Så kalder jeg den f.eks. sådan:
sudokurandom(27, Array(7, 8, 9, 16, 17, 18, 25, 26));

Så skal jeg have lavet funktionen i noget i denne retning:
function sudokurandom($n, $a) {
for($sudoku['$n']=random(); $sudoku['$n']==$a; $sudoku['$n']=random());
}

Jeg ved godt at $sudoku['$n']==$a ikke virker..men hvordan kan jeg gøre det?
Avatar billede erikjacobsen Ekspert
13. februar 2006 - 20:10 #4
Du kan løbe dit array igennem med en forløkke:

for ($i=0;$i<count($a);$i++) {
...}

og så teste hvad du skal for hvert element.
Avatar billede dennism Nybegynder
13. februar 2006 - 20:50 #5
Har du en idé til, hvordan jeg kan klare det jeg ønsker?
Avatar billede erikjacobsen Ekspert
13. februar 2006 - 21:14 #6
Jah, måske. Hvis du mener at du skal finde en tilfældig værdi, som ikke er i $sudoku[7], ...,$sudoku[26], så vil jeg mene din strategi fra selve spørgsmålet er knap så god. I det eksempel du viser har du 8 værdier det ikke må være. Er der så ikke kun een tilbage.

Mit forslag til indhold af funktionen:

1) Lav et array med tal fra 1 til 9
2) Fjerne fra dette array de tal, der findes i $a.
3) Vælg eet af de tal, der er tilbage, tilfældigt.

(om jeg forstår dig ret)
Avatar billede dennism Nybegynder
14. februar 2006 - 07:31 #7
Det kan godt være du har ret I, at det er en bedre måde at gøre det på?

Hvis vi siger, at jeg f.eks. stadig kalder funktionen sådan:
sudokurandom(27, Array(7, 8, 9, 16, 17, 18, 25, 26));

Hvordan skal min funktion så erklæres?

function sudokurandom($n, $a) {
$arr = array("1","2","3","4","5","6","7","8","9");

for ($i=0;$i<count($a);$i++) {

}

}

Jeg har der lavet funktionen, hvor der er lavet er array med tallene fra 1 til 9. Efterfølgende går den tallene i $a igennem, men jeg skal have fjernet de tal fra arrayet, som er lig de tal som er i $a. Hvordan gør jeg det?
Derefter skal jeg have valgt et tilfældigt tal af dem der er tilbage i $array. Hvordan gør jeg det?
Avatar billede erikjacobsen Ekspert
14. februar 2006 - 09:24 #8
At slette eller ikke slette, det er spørgsmålet. Måske en lille ændring.

function sudokurandom($n, $a) {
  global $sudoku;
  $arr1 = array();
  for ($i=0;$i<count($a);$i++) {
    $arr1[]=$sudoku[$a[$i]];
  }
  // print_r($arr1);    // Testudskrift
  $arr2 = array();
  for ($i=1;$i<=9;$i++) {
    if (!in_array($i,$arr1)) {
      $arr2[]=$i;
    }
  }
  // print_r($arr2);    // Testudskrift

  // og så vælg een fra $arr2

}
Avatar billede dennism Nybegynder
26. februar 2006 - 18:44 #9
Tak. Smider du lige et svar?
Avatar billede erikjacobsen Ekspert
26. februar 2006 - 19:35 #10
Nej tak, jeg samler slet ikke på point.
Avatar billede dennism Nybegynder
27. februar 2006 - 07:16 #11
.lukker
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