Avatar billede brian_lundgaard Nybegynder
04. november 2005 - 13:48 Der er 6 kommentarer og
1 løsning

Arrays i PHP

Hvad er der galt med følgende:

++$modstander[$black_id];
$modstander[$black_id][1]=$black_id;
if ($white_res==1) $modstander[$black_id][2] = $modstander[$black_id][2]+1;
if ($white_res==½) $modstander[$black_id][3] = $modstander[$black_id][3]+1;
if ($white_res==0) $modstander[$black_id][4] = $modstander[$black_id][4]+1;

Optællingen (første linje) fungerer, men der kommer ingen værdier i de andre variabler (fx $modstander[22][1] )

Der er tale om en optælling, hvor jeg fra databasen får to variabler $black_id og $white_res. Ved en typisk forespørgsel kommer der omkring 500 linjer. I adskillige af disse vil der være tale om samme modstander ($black_id) og disse forskellige resultater vil jeg gerne have talt sammen, så jeg har oplysninger om modstander id ($black_id) og om samlet antal partier ($modstander[$black_id]) og om antal af sejre, remis, og tab ($modstander[$black_id][2], [3] og [4]) mod den givne spiller.

Jeg har stirret mig blind på det nu. Er der nogen, som kan hjælpe?
Avatar billede erikjacobsen Ekspert
04. november 2005 - 13:56 #1
Du skal nok ikke bruge sammen navn, $modstander, til både et 1-dim og et 2-dim array.
Avatar billede brian_lundgaard Nybegynder
04. november 2005 - 14:01 #2
Men, så er vi tilbage ved, hvad jeg vil opnå: Når informationerne er opsamlet, skal listen kunne sorteres, så jeg kan hente den fem hyppigste forekomster ud. Derfor har jeg jo brug for, at dataene beholder deres association, når listen sorteres!?
Avatar billede erikjacobsen Ekspert
04. november 2005 - 14:08 #3
Ja, men det kan du sikkert godt alligevel. Jeg forstår ikke præcis, hvad du vil opnå. Du er nok nødt til at komme med et eksempel. Der er en masse gode sorteringsfunktioner, fx. http://php.net/asort
Avatar billede brian_lundgaard Nybegynder
04. november 2005 - 14:15 #4
Sorteringen er ikke et problem. Men lad os sige, at jeg puttede antal partier i følgende variabel:

$antal_partier[$black_id]=++$antal_partier[$black_id];

Og gjorde det, hver gang, jeg fik et $black_id fra databasen, så kunne jeg bagefter kører en rsort($antal_partier); Så er $antal_partier[0] = det største antal spillede partier i databasen for den spiller, MEN så ved jeg ikke længere, hvad den spillers spiller_id er (det var jo oplysningen $black_id), da rsort(); nulstiller alle keys! Samtidig mangler jeg oplysningerne om remis, sejr og tab (hvis jeg fylder dem i et andet array, sorteres de jo ikke, når $antal_partier sorteres!)
Avatar billede erikjacobsen Ekspert
04. november 2005 - 14:17 #5
Men prøv så asort() og en foreach. Det kan være du bliver overrasket... ;)
Avatar billede erikjacobsen Ekspert
04. november 2005 - 14:32 #6
Eksempel:
<?

  $a[33]+=7;
  $a[13]+=6;
  $a[23]+=5;
  $a[33]+=4;
  $a[23]+=1;
  $a[13]+=2;


  foreach ($a as $k=>$v) {
    print "$k -> $v\n";
  }

  asort($a);

  foreach ($a as $k=>$v) {
    print "$k -> $v\n";
  }
?>
Avatar billede brian_lundgaard Nybegynder
04. november 2005 - 20:56 #7
man kan ikke først erklære et en-dimensionelt array med

++$modstander[$black_id];

og så bagefter ville bruge samme array multi-dimensionelt! Derfor virker det at ændre det til

++$modstander[$black_id][0];

Tak for forsøget!
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