Gå til innhold

Plasseringsliste med delte plasser [Løst]


Gjest Slettet+98128394

Anbefalte innlegg

Gjest Slettet+98128394

Jeg har tenkt til å lag en liste som kan sortere resultater og plasseringer. Siden det ofte skjer at at noen får lik poengsum vil jeg at de skal dele plasseringen, men hvordan får jeg til det?

 

Slik jeg ønsker lista skal se ut:

 

1. Hans 1000

1. Ole 1000

3. Ivar 900

4. Klaus 800

Endret av Slettet+98128394
Lenke til kommentar
Videoannonse
Annonse

Problemet er vel at når man looper vil den ikke nummerere riktig...

 

$plass = 1;
$sistePoeng = "";
foreach ($poeng as $key => $value) {
echo $plass . " " . $value . "<br>";
if ($value != $sistePoeng) {
$plass++;
}
}

 

Slik da?

Endret av ZoRaC
Lenke til kommentar
Gjest Slettet+98128394

Jeg har brukt det du foreslo pluss med litt justering. Men jeg har enda ikke fått det helt som jeg vil. Dette er mitt nåværende script for denne handlingen:

 

$plass = 0;
$sistePoeng = "";

   foreach ($sjekkliste as $el => $value)
      {
           
           if($value != $sistePoeng)
           {
               $plass++;
           }
           echo $plass . ". " . $value . "</br>";
           if($value == $sistePoeng)
           {
               $plass++;
           }
           
           $sistePoeng = $value;
       }

 

Problemet med denne koden er at den kun takler at maks 2 personer får lik poengsum. Er det flere som får likt blir tallene i lista feil.

 

Dette er det som vises av scriptet i nettleseren:

 

1. 243

2. 240

2. 240

4. 238

4. 238

5. 238

6. 238

8. 235

9. 230

 

Da ser man at når det er 4 stk med 238 poeng blir det trøbbel. Men når det er slutt på like poengsummer så begynner den å telle riktig igjen. Det er derfor den hopper over 7. plassen.

Lenke til kommentar
$plass = 0;
$sistePoeng = "";

   foreach ($sjekkliste as $el => $value)
      {
           
           if($value != $sistePoeng OR $value == $sistePoeng)
           {
               $plass++;
           }
           echo $plass . ". " . $value . "</br>";

           
           $sistePoeng = $value;
       }

7638654[/snapback]

 

Tror dette blir mere riktig.

Lenke til kommentar

Den blir jo en smule ulogisk siden if-en alltid vil være true. Det her fungerer:

PHP
$plass = 0;

$ant_like = 0;

$siste = 0;

$size = count($liste);

for ($i = 0; $i < $size; $i++)

{

if ($liste[$i] === $siste)

$ant_like++;

else 

{

$plass += 1 + $ant_like;

$ant_like = 0;

$siste = $liste[$i];

}

echo $plass.'. '.$liste[$i]."<br />\n";

}

Lenke til kommentar

PHP
$plass = 0;

$ant_like = 0;

$siste = 0;

$size = count($liste);

for ($i = 0; $i < $size; $i++)

{

if ($liste[$i] === $siste) {

$ant_like++;

}

else 

{

$plass += 1 + $ant_like;

$ant_like = 0;

$siste = $liste[$i];

}

echo $plass.'. '.$liste[$i]."<br />\n";

}

 

Det var noe rart med en if-setingen min. Men må du ikke ha ed de to {} jeg la til?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...