2011-01-12 10 views
2

Nun, ich denke über das Hinzufügen einer Bewertungsfunktion zu meiner Anwendung, wo Mitglieder zwischen 1-5 wählen können (das ist die $rating), und ich zeige die durchschnittliche Punktzahl wie $score = $number_of_voters/$rating. Dabei ist $number_of_voters die Gesamtzahl der Mitglieder, die für diesen bestimmten Artikel abgestimmt wurden, und $rating ist die Gesamtbewertung für diesen bestimmten Artikel.PHP Stimmstärke/Kraft?

Auf diese Weise kann die $score nicht höher als 5 sein (was aus ist).

Allerdings denke ich über die Integration einer Wahl Intensität/Kraft nach dem Benutzer RPG-Ebene (das ist eine Zahl zwischen 1-8, die schrittweise erhöhen kann - die jedes Mitglied zugewiesen hat), also wenn sie zum Beispiel gewählt und ihr RPG-Level war 1, die durchschnittliche Punktzahl wäre nicht zu verschieden von der vorherigen (würde es nicht zu sehr beeinflussen), aber wenn es so etwas wie 8 wäre, dann würde es mehr bewirken? (zu resümieren ihre RPG-Ebene würde intern bei der Abstimmung berücksichtigt werden).

Aber nicht sicher, wie man vorgeht (wie zu integrieren/zu implementieren) ohne die ursprüngliche Spezifikation zu beeinflussen (dh. Ich möchte nicht, dass der Score höher wird als 5 (will $ < = 5)).

+0

$ score = $ Anzahl_der_Wähler/$ Bewertung? was bedeutet das...meinst du $ score = $ number_of_voters (rating = 1)/1 + $ number_of_voters (rating = 2)/2 usw. – Jason

+0

@Jason ich habe meine erste Frage/Post mit mehr Informationen bearbeitet - bitte sehen Sie es :) – newbtophp

Antwort

2

Um Ihre unmittelbare Frage zu beantworten, können Sie durch eine gebrochene Gewicht 0-1 multiplizieren kann. Wenn Sie verschiedene Ebenen haben, können Sie diese Gewichtung erhalten, indem Sie die Stufe des Benutzers durch die maximale Stufe dividieren.

Aber bevor Sie anfangen zu programmieren, sollten Sie How Not To Sort By Average Rating lesen, so dass Sie einige der häufigsten Fallstricke mit dieser Art von Abstimmungssystem vermeiden.

+0

+1 - großer Artikel, danke. – Drew

1

Jeder Benutzer trägt (weight)*(rating) zur Gesamtbewertung bei, so dass der Zähler die Summe aller Benutzer ist.

Der Nenner ist die maximal mögliche Punktzahl, für jeden Benutzer ist dies (weight)*5. Somit ist der Nenner die Summe aller Benutzer.

berechnen dann die Punktzahl als:

sum{ (user i's weight) * (user i's rating) }/sum{ (user i's weight) * 5 } 

jedoch Hinweis, diese Sie eine Punktzahl im Bereich von 0-1 gibt, wenn man die Punktzahl im Bereich von 0-5 wollen Sie von 5 normalisieren können, Dies entfernt den Faktor 5 im Nenner.

Gesetzt hatte man zwei Arrays, eines der Bewertungen (das i -te Element entspricht den i -te Bewertung des Benutzers) $ratings und einer von den Gewicht (i -te Position entspricht die i -te RPG Ebene des Benutzers) $weights Sie können dies als berechnen:

$numer = 0; 
$denom = 0; 
for($i = 0; $i < count($ratings); $i++){ 
    $numer = $weights[$i]*$ratings[$i]; 
    $denom = $weights[$i]; 
} 
$avg = $numer/$denom; 
+1

Cheers Mark für die schnelle Antwort, aber ich bin ein wenig verwirrt, wie Sie Ihre Methode integrieren können, können Sie herausfinden, was "$ ratings" ist und "$ weights" ist (ich verstehe ihre Arrays, aber nicht sicher, welche Daten sie halten), Bitte? – newbtophp

+0

@newb: ok - aktualisiert. –

0

Probieren Sie etwas wie dies zu tun ... Ein Level 1 Benutzer zählt als 1 Stimme Stimme, während ein Niveau 8 Benutzer zählt als 8 Stimmen Stimme:

$thisvote = $level * $vote; 
//a user with a level 5, and a vote of 5...this is 25 
$total = ($total + $thisvote)/$level + 1; 
//if total was 4, 25+4 = 29, 29/6 = 4.83 

Das ist einfacher als Arrays zu verwenden, wenn Sie es nicht sind tatsächlich alle Benutzer speichern, die gewählt haben und was ihre Stimme war.