login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Eenvoudige manier van punten uitdelen

Offline roelh - 11/07/2008 10:21
Avatar van roelhPHP gevorderde Heey allemaal,

Ik zit met een probleempje.
Ik wil graag een heleboel getallen vergelijken en daarbij punten toe gaan kennen.
Alleen nu word het een heel grote code als ik het wil doen op mijn manier (weet geen eenvoudige)
Gaat hierom
we hebben 5 spelers.
nu word elke speler zo weergegeven:
$data[1]['tegengoals']
$data[2]['tegengoals']
$data[3]['tegengoals']
$data[4]['tegengoals']
$data[5]['tegengoals']

Nu wil ik die de minste tegengoals heeft bijvoorbeeld 5 punten krijgt
daarna 4,3,2,1
Alleen nu heb ik een heel zooitje waar uit gerekend moet worden, word dus een lange pagina.
weet iemand een simpele manier om te rekenen en punten uit te delen?
Zou super zijn!

Groet,

16 antwoorden

Gesponsorde links
Offline Berten - 11/07/2008 10:55 (laatste wijziging 11/07/2008 10:56)
Avatar van Berten PHP beginner Als je je array sorteert op die tegengoals is de bovenste degene met de minste punten, en de laatste de gene met de meeste punten.

PHP.net: sort
PHP.net: uasort
Offline roelh - 11/07/2008 10:59
Avatar van roelh PHP gevorderde Oke, maar dan moet ik nog punten gaan uitdelen.
Die staan vast.
zoals ik al net aangaf.
Plaats 1 krijgt 5 punten en nummer laatst 1.
Alleen dit verwisselt per seizoen. we spelen 40 wedstrijden, we willen dus een fictieve stand bijhouden.
ALleen hoe kan ik die punten dan toedelen?
Offline Berten - 11/07/2008 11:03 (laatste wijziging 11/07/2008 11:14)
Avatar van Berten PHP beginner Je hebt 5 teams?

als je ze sorteert op tegengoals oplopend, heeft de gene met de minste tegengoals plaats 1, de volgende 2, en degene met de meeste staat op de 5de plaats, het is dus kwestie van je array te sorteren en daarna er door te loopen en je punt is dan het 'hoeveelste element van de array' dat element is.


ik zal't even proberen na te bootsen voor je
Offline roelh - 11/07/2008 11:06
Avatar van roelh PHP gevorderde Zijn 5 spelers.

$data[1] is dan speler 1
en zo maa doorgaan.
Maar ik snaphet niet precies hoe ik het moet maken. Zoo super goed ben ik er jammer genoeg niet in.
Wil je me een klein beginnetje maken?
van daaruit wil ik het dan proberen
Offline Berten - 11/07/2008 11:23 (laatste wijziging 11/07/2008 11:39)
Avatar van Berten PHP beginner
  1. function cmp($a, $b)
  2. {
  3. if ($a["tegengoals"] == $b["tegengoals"]) {
  4. return 0;
  5. }
  6. return ($a["tegengoals"] < $b["tegengoals"]) ? -1 : 1;
  7. }
  8.  
  9. $data[1]["tegengoals"] = 3;
  10. $data[2]["tegengoals"] = 2;
  11. $data[3]["tegengoals"] = 5;
  12. $data[4]["tegengoals"] = 98;
  13. $data[5]["tegengoals"] = 3;
  14.  
  15. uasort($data,'cmp');
  16.  
  17. $aantal = count($data);
  18. for ($teller=1;$teller<=$aantal;$teller++) {
  19. $data[$teller]["punten"] = $teller;
  20. }
  21. sort($data);
  22. print_r($data);


Resultaat:
  1. (
  2. [0] => Array
  3. (
  4. [tegengoals] => 2
  5. [punten] => 2
  6. )
  7.  
  8. [1] => Array
  9. (
  10. [tegengoals] => 3
  11. [punten] => 1
  12. )
  13.  
  14. [2] => Array
  15. (
  16. [tegengoals] => 3
  17. [punten] => 5
  18. )
  19.  
  20. [3] => Array
  21. (
  22. [tegengoals] => 5
  23. [punten] => 3
  24. )
  25.  
  26. [4] => Array
  27. (
  28. [tegengoals] => 98
  29. [punten] => 4
  30. )
  31.  
  32. )
Offline roelh - 11/07/2008 11:29
Avatar van roelh PHP gevorderde Thanks dat werkt wel, maar hoe weet ik nu precies aan wie ik de punten uitdeel? Want er staatnu alleen maar tegengoals, zonder erbij welke persoon [1] of [2] of [3] ...
En nu snap ik niet geheel precies nog hoe ik zenu toedeel aan de personen...
Offline Berten - 11/07/2008 11:39
Avatar van Berten PHP beginner Kijk naar men voorgaande post

moderator: je mag deze posts verwijderen
Offline roelh - 11/07/2008 11:46
Avatar van roelh PHP gevorderde Had het al gezien ja...
Allen nu nog KLEIN probleempje...
Nu geeft hij dit weer:

  1. Array ( [0] => Array ( [wedstrijdid] => 41 [goals] => 43 [tegengoals] => 3 [schoten] => 296 [schotendoel] => 164 [corners] => 63 [overtredingen] => 117 [buitenspel] => 24 [geel] => 24 [rood] => 12 [balbezit] => 43.1220 [vrijetrap] => 0 [punten] => 5 ) [1] => Array ( [wedstrijdid] => 57 [goals] => 115 [tegengoals] => 3 [schoten] => 461 [schotendoel] => 292 [corners] => 136 [overtredingen] => 160 [buitenspel] => 40 [geel] => 13 [rood] => 7 [balbezit] => 51.9649 [vrijetrap] => 1 [punten] => 1 ) [2] => Array ( [wedstrijdid] => 58 [goals] => 125 [tegengoals] => 2 [schoten] => 580 [schotendoel] => 363 [corners] => 152 [overtredingen] => 187 [buitenspel] => 63 [geel] => 18 [rood] => 2 [balbezit] => 51.9138 [vrijetrap] => 1 [punten] => 2 ) [3] => Array ( [wedstrijdid] => 62 [goals] => 151 [tegengoals] => 5 [schoten] => 560 [schotendoel] => 356 [corners] => 141 [overtredingen] => 166 [buitenspel] => 44 [geel] => 35 [rood] => 12 [balbezit] => 51.0484 [vrijetrap] => 0 [punten] => 3 ) [4] => Array ( [wedstrijdid] => 64 [goals] => 125 [tegengoals] => 98 [schoten] => 552 [schotendoel] => 327 [corners] => 117 [overtredingen] => 198 [buitenspel] => 53 [geel] => 38 [rood] => 11 [balbezit] => 50.2031 [vrijetrap] => 0 [punten] => 4 ) )


met deze code:
Plaatscode: 12018
Offline Berten - 11/07/2008 11:53 (laatste wijziging 11/07/2008 12:00)
Avatar van Berten PHP beginner
ik heb de for lus verandert, dat maakt het wat dynamischer, en lost het probleem op als het goed is.


  1. $teller = 1;
  2. foreach ($data as $key => $value) {
  3. $data[$key]["punten"] = $teller;
  4. $teller++;
  5. }


Offline roelh - 11/07/2008 12:06 (laatste wijziging 11/07/2008 12:09)
Avatar van roelh PHP gevorderde Gelukt, alleen hoe krijg ik nu alles mooi onder elkaar weer zoals jij dat ook hebt?
Want ik heb nu alles naast elkaar, en wil onder elkaar om te vergelijken namelijk, gaat beter dan
Offline Berten - 11/07/2008 12:10 (laatste wijziging 11/07/2008 12:11)
Avatar van Berten PHP beginner om dat zo onder elkaar te zien

in je browser - rechter muisknop, view source

daar staat ie netjes in
Offline roelh - 11/07/2008 12:15
Avatar van roelh PHP gevorderde Thanks, wist ik niet:P
Maar heb nu dit, klopt niet helemaal lijkt me...
  1. (
  2. [0] => Array
  3. (
  4. [tegengoals] => 78
  5. [punten] => 1
  6. )
  7.  
  8. [1] => Array
  9. (
  10. [tegengoals] => 112
  11. [punten] => 2
  12. )
  13.  
  14. [2] => Array
  15. (
  16. [tegengoals] => 113
  17. [punten] => 5
  18. )
  19.  
  20. [3] => Array
  21. (
  22. [tegengoals] => 115
  23. [punten] => 3
  24. )
  25.  
  26. [4] => Array
  27. (
  28. [tegengoals] => 141
  29. [punten] => 4
  30. )
  31.  
  32. )


Hij geeft niet goede aantal punten aan de mensen...
Offline Berten - 11/07/2008 13:08
Avatar van Berten PHP beginner nee, komt denk'k omdat je vanaf 1 begint te tellen en je array start vanaf 0, probeer dat eens aan te passen (anders moet je nog maar es code laten zien)
Offline roelh - 11/07/2008 13:16
Avatar van roelh PHP gevorderde Werkt jammer genoeg ook niet.
Maar ik wil ook eigenlijk mijn eigen punten kunnen toedelen.
Want voor elk onderdeel is een aparte puntentelling namelijk.
Dat is ook mogelijk lijkt me?
Maar dit is me code nu:

Plaatscode: 12023
Offline Berten - 11/07/2008 13:37
Avatar van Berten PHP beginner Het is inderdaad mogelijk om je eigen puntentelling te gebruiken, maar ik heb je jop weg gezet zoals je vroeg ;)


voor je probleem.

Je $tegengoals array moet je niet gebruiken, dat is enkel om wat te kunnen spelen met data tijdens het testen. Ik hoop dat in je $data array ook een element met key $tegengoals zit (dat uit de databank komt), dus kan je die beter gebruiken.

dat zou de enige aanpassing zijn die je moet doen

Dit verwijderen:
  1. $tegengoals[1]["tegengoals"] = $data[1]['tegengoals'];
  2. $tegengoals[2]["tegengoals"] = $data[2]['tegengoals'];
  3. $tegengoals[3]["tegengoals"] = $data[3]['tegengoals'];
  4. $tegengoals[4]["tegengoals"] = $data[4]['tegengoals'];
  5. $tegengoals[5]["tegengoals"] = $data[5]['tegengoals'];


Dit aanpassen
  1. $aantal = count($tegengoals);
  2. for ($teller=0;$teller<=$aantal;$teller++) {
  3. $tegengoals[$teller]["punten"] = $teller;
  4. }


naar

  1. $aantal = count($data);
  2. for ($teller=0;$teller<=$aantal;$teller++) {
  3. $data[$teller]["punten"] = $teller;
  4. }



Wat betreft je eigen score:
1. maak het aantal punten afhankelijk van de plaats
Dwz: het aantal gekregen punten moet te bekomen zijn door een bewerking op de plaats te doen. (vb: *2 of /4)

2. Ranges
plaats 1-10 = x aantal punten
plaats 11-20 = y aantal punten
Offline roelh - 11/07/2008 14:30
Avatar van roelh PHP gevorderde na het wil me nog niet goed lukken, maargoed, probeer het nog wel een X
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.28s