login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Overeenkomst uitrekenen

Offline GroundZero - 15/03/2012 21:54
Avatar van GroundZeroLid Beste,

ik moet een script maken waarin ik dingen moet vergelijken en aan de hand daarvan een score moet geven.

Een voorbeeld:

Mijn keuze: 10
Waarde in database: 25

Als de waarde in de database 10 was geweest, dan kreeg dit onderdeel een score van 100 (100%) omdat het 1:1 het zelfde is.

in bovenstaand geval zoek ik iets van 10, en in de database is het 25. Dit houd in dat er een verschil van 15 is.

Dit "verschil" moet ik dus verwerken in de score.

Zo moet ik diverse elementen kunnen beoordelen en in één variabele ($totale_score) moet ik dan een eindscore krijgen van 0 (nul) tot en met honderd (100) waarbij natuurlijk 100 de hoogst haalbare score is.

Zou iemand mij kunnen vertellen hoe ik dit kan realiseren? ik ben namelijk niet erg goed in rekenen en zou ook niet echt weten hoe ik dit in een functie kan verwerken.

Mijn code tot nu toe:

  1. function berekenScore($gebKeuze, $dbKeuze){
  2. // variabele zetten
  3. $totale_score = 0;
  4.  
  5. // bereken het verschil tussen elk element
  6. // 100 = perfecte score
  7. // 0 = minimale score
  8. /////////////////////////////////////////////
  9. return 'blaat';
  10. }


Zoals jullie begrijpen wil ik de functie kunnen uitbreiden met meer dingen om te testen bijvoorbeeld:

  1. function berekenScore($gebKeuze1, $dbKeuze1, $gebKeuze2, $dbKeuze2, $gebKeuze3, $dbKeuze3)

11 antwoorden

Gesponsorde links
Offline vinTage - 15/03/2012 23:41 (laatste wijziging 15/03/2012 23:46)
Avatar van vinTage Nieuw lid Mij lijkt het dat je het moet berekenen naar %

Er van uitgaande, dat een gebruiker niet hoger kan ingeven dan wat er in de database staat, dan moet je function als volgt:

  1. function berekenScore($gebKeuze, $dbKeuze)
  2. {
  3. return ($gebKeuze / $dbKeuze) * 100;
  4. }


Maar als een gebruiker bijvoorbeeld het dubbele invoert van wat er in de db staat, dan returned de function ook 200%......dus wat is waarheid ? 


edit, ah je kan natuurlijk gewoon vergelijken of de ingegeven waarde niet hoger is dan de db waarde, zowel, dan van elkaar aftrekken.
Offline GroundZero - 15/03/2012 23:46 (laatste wijziging 15/03/2012 23:56)
Avatar van GroundZero Lid Oke even een ander voorbeeld dan (stom voorbeeld met gekke getallen maar goed).

Ik zoek een huis met een oppervlakte van 30 vierkante meter.
In de zoekresultaten komt één huis naar voren, deze heeft een oppervlakte van 45 vierkante meter.

Dit scheelt 15 vierkante meter. De score is dus geen 100 want er is een verschil. Ik wil nu de score weergeven van laten we zeggen bijvoorbeeld 7,5 uit de 100 punten.

Echter, wanneer ik zou invullen dat ik een huis van 1000 vierkante meter wil, dan is dit veel groter dan het huis wat beschikbaar is (bovenstaand) van 45 vierkante meter. Ook nu geld weet het zelfde, dat er een verschil is en ik dus geen 100 punten kan halen. In dit geval zou ik heel weinig punten halen omdat het verschil groot is maar goed...

Je snap het idee wel 

EDIT: In mijn voorbeeld wat ik zelf test op mijn site is het dit:

Ik wil: 30 vierkante meter
Er is: 32 vierkante meter

Als ik zeg:

  1. return ($gOppWoonkamer - $dOppWoonkamer) * 100;


Dan krijg ik: 3000 als waarde terug. Gaat dus ergens echt iets fout haha 
Offline vinTage - 15/03/2012 23:57
Avatar van vinTage Nieuw lid Maar dan klopt mijn function wel beter he (behalve als je hoger opgeeft, maar daar zal ik nog wel over denken tussen het kaarten door) 
Offline GroundZero - 15/03/2012 23:58
Avatar van GroundZero Lid hahaha oke dankjewel, succes met het kaarten ;)

maar rest mij wel de vraag (ik zal wel dom aan het doen zijn):

Als jou functie klopt... waarom geeft hij mij dan de waarde -3000 ?
Want het verschil (integer of procenten) tussen 30 en 32 is geen -3000 (of 3000 als ik de variable omdraai in de check) 
Offline vinTage - 16/03/2012 00:06
Avatar van vinTage Nieuw lid mijn func klopt wel, maar jij hebt hem niet correct over genomen, ik gebruik / en jij -
Offline GroundZero - 16/03/2012 00:09 (laatste wijziging 16/03/2012 00:18)
Avatar van GroundZero Lid potverdommen, het is ook al laat he   
Ik zal er eens mee gaan spelen. hartstikken bedankt voor zover!!!

Hopelijk morgen een reactie voor oplossing wanneer ik iets hoger in geef want dat loopt nu in de soep haha, maar dit werkt alvast en daar ben ik al heel erg blij mee ;)
Offline vinTage - 16/03/2012 00:18 (laatste wijziging 16/03/2012 00:23)
Avatar van vinTage Nieuw lid
  1. function berekenScore($gebKeuze, $dbKeuze)
  2. {
  3. return ($gebKeuze > $dbKeuze) ? 100 - berekenScore($gebKeuze - $dbKeuze, $dbKeuze) : ($gebKeuze / $dbKeuze) * 100;
  4. }
  5.  
  6. echo berekenScore(100, 100);
  7. echo '<br>';
  8. echo berekenScore(50, 100);
  9. echo '<br>';
  10. echo berekenScore(125, 100);
  11. echo '<br>';
  12. echo berekenScore(175, 100);


edit: klopt nog niet helemaal zie ik net, maar de 'logica' is er ongeveer wel, de rest is voor jou 
Offline GroundZero - 16/03/2012 00:36
Avatar van GroundZero Lid Ik ga het morgen eens uitproberen haha, ik ben niet zo goed met short-tags omdat ik dat nooit gebruik (mij altijd verteld dat dit niet zo goed is???? cross-browser of zo?) maar super bedankt zo ver vinTage echt super!

Goede nacht!
Offline vinTage - 16/03/2012 01:45 (laatste wijziging 16/03/2012 01:54)
Avatar van vinTage Nieuw lid php is clientside, dus crossbrowser (browser == clientside) is een vaag/niet geldig argument 

Je bedoeld een verkorte if/else (want <?= dit is een short tag), maar die werken perfect hoor, alleen laat de leesbaarheid voor 'beginners' af en toe te wensen over.

Basicly...

  1. //hiermee werken we
  2. $a = 'a';
  3. $b = 'b';
  4.  
  5.  
  6. //manier een
  7. if($a == $b)
  8. {
  9. echo $a.' is hetzelfde als '.$b;
  10. }
  11. else
  12. {
  13. echo $a.' is niet hetzelfde als '.$b;
  14. }
  15.  
  16.  
  17. //versus
  18.  
  19. echo $a == $b ? $a.' is hetzelfde als '.$b : $a.' is niet hetzelfde als '.$b;

Voor het vraagteken staat de conditie, dan het resultaat (als het voldoet aan de conditie, en na de dubbele punt de else.

mss duidelijker zo ?
  1. $zus = false;
  2. echo if($zus) ? "zus" : "zo" //$zus is false, dus echo'd 'zo'



anyway, ontopic
Bij mijn vb klopt die 100 - berekenScore(...) niet, die 100 is niet effectief 100, je moet daar nog 'iets' mee doen, maar WAT dat 'iets' is, is me nu nog onbekend, ik ZUIG in Math!!
Offline GroundZero - 16/03/2012 12:22
Avatar van GroundZero Lid Dankjewel voor je duidelijk uitleg vintage, hier kan ik zeker mee aan de slag haha 
Ik ga jou formule gebruiken en nog even kijken naar de "perfecte" oplossing. Ik kan ook weinig tot niks van Math lol 

Dankjewel voor zover je hebt me echt ontzettend op weg geholpen ;)
Offline shamrock - 17/03/2012 10:42
Avatar van shamrock Lid misschien denk ik verkeerd, maar wat als je altijd de kleinste waarde pakt en die deelt door de grootste en dan * 100%??

bij een db waarde van 50 en jouw keuze van bv 760 krijg je:
50 / 760 * 100 = 6,6%

bij een db waarde van 50 en jouw keuze van bv 53 krijg je:
50 / 53 * 100 = 94,3%


bij een db waarde van 48 en jouw keuze van bv 42 krijg je:
42 / 48 * 100 = 87,5%
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.223s