22. december 2008 - 23:08Der er
22 kommentarer og 1 løsning
Simpelt array
Hej.
Jeg har _aldrig_ før arbejdet med arrays i PHP. Jeg står så nu i en situation, hvor jeg skal bruge et array.
Det lyder såldes:
I mit brugersystem har jeg et felt i SQL tabellen kaldt "point". Det angiver mærkeligt nok, hvor mange point brugerne har.
Jeg skal så have udskrevet en liste, med alle brugerne og deres _placering_ (Placering ud fra point). Placeringen skal beregnes, dvs. der er ikke noget felt i SQL tabellen kaldt placering eller lign.
For at beregne den enkelte brugers placering, kører jeg en løkke der kører gennem alle brugere. Hvis den enkelte brugers antal point, er mindre end brugeren, som løkken er nået til, så plusses en variabel der starter på 0, med 1.
Det fungerer fint, og gør også, at brugere med samme antal point, får samme placering, så det er fair.
Problemet opstår så i det, at brugerne med samme antal point, har samme placering. For når en bruger med f.eks 2 point mindre end alle de andre brugere med samme antal point, skal have beregnet sin placering, så vil den ligge MEGET lavere.
Jeg skal derfor inde i løkken, have lagt brugerens point, altså brugeren som løkken er nået til, ind i et array, hvorved jeg så med en if statement inde i løkken, kan sørge for, at denne variablen der starter på 0, kun plusses med 1, så fremt brugeren den er nået til's antal point, ikke findes i array'et.
En smule besværligt at forklare, men jeg håber i forstår.
Præcis. Mit nuværende problem er jo så, at det ser sådan ud, f.eks:
Spiller 1 - 100 point Spiller 2 - 100 point Spiller 3 - 200 point Spiller 4 - 99 point
Så får den pladserne:
Spiller 1 - 2. Plads Spiller 2 - 2. Plads Spiller 3 - 1. Plads Spiller 4 - 4. Plads
Som der kan ses, skal Spiller 4. have 3. Plads og ikke 4. Plads. Grunden til dette, er at jo, at der er 3 andre spillere, der har flere point end ham. Men jeg skal så have lagt alle spillernes point ind i et array når løkken køres, så der ikke opstår dette problem. Jeg kan så selv fikse resten ved hjælp af if statements.
Mærkeligt jeg ikke har tænkt på det noget før. Det vil jo egentlig også sørge for, at ingen brugere kan have samme placering.
Men du tænker på noget i den her stil?:
$brugernavn = Her har vi den enkelte brugers brugernavn $placering = 1;
$hent_brugere = mysql_query("SELECT * FROM `brugere` ORDER BY `point`");
while ($vis_brugere = mysql_fetch_array($hent_brugere)) { if ($vis_brugere["brugernavn"] == $brugernavn) { //Kode til at stoppe while (Må du iøvrigt gerne hjælpe mig med) } else { $placering++; } }
Jeps, har fået det til at virke. Skal dog på en måde kunne stoppe løkken, når den de brugerne matcher hinanden ;) Lige pt. bruger jeg 2 variabler, blot lige for at se, om det ville virke.
Men jeg har prøvet med exit(); endwhile; etc, ligger du inde med noget?
find brugerens antal point med: //Finder brugeren SELECT point FROM brugere WHERE navn = 'noget' LIMIT 1 //Finder placering SELECT COUNT(*) FROM brugere WHERE point > $point_fra_før //Placering = placering + 1
$hent_placering = mysql_query("SELECT COUNT(*) AS placering FROM `brugere` WHERE `point` > '$vis_bruger[point]'"); $vis_placering = mysql_fetch_assoc($hent_placering);
$placering = $vis_placering["placering"] + 1;
Men så kan brugerne have samme placering. Så hellere den anden metode med SQL, hvor jeg selv kan vælge at sorterer ;-)
$point_fra_foer = 10; $query = mysql_query("SELECT point FROM brugere WHERE point > $point_fra_foer ORDER BY points DESC") or die(mysql_error()); $i=1; echo '<table>'; while($result = mysql_fetch_assoc($query)){ echo '<tr><td>'; echo ($result['points'] != $last_number)? $i++: ''; echo '</td><td>'.$result['points'].'</td></tr>'; $last_number = $result['points']; } echo '</table>';
Synes godt om
Ny brugerNybegynder
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.