Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Web Development
You last visited: Today at 23:51

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[php] "Rank" System

Discussion on [php] "Rank" System within the Web Development forum part of the Coders Den category.

Reply
 
Old 07/02/2015, 21:54   #16



 
Shawak's Avatar
 
elite*gold: 0
The Black Market: 259/0/0
Join Date: Apr 2010
Posts: 10,289
Received Thanks: 3,613
Wahrscheinlich weil du die Session Variable nicht dementsprechend abänderst.

Zum dritten mal, mach es richtig und benutz Bitflags.
Shawak is offline  
Old 07/03/2015, 13:57   #17
 
elite*gold: 0
Join Date: May 2015
Posts: 700
Received Thanks: 444
Quote:
Originally Posted by CeLiFiG View Post
Ich glaube ich bin noch ein bisschen zu doof für Bitflags.
Angenommen, du hast einige Kekse und möchtest die zählen. Dann fängst du an: 1, 2, 3, ..., 9. Du ordnest also jedem Keks eine Ziffer zu. Wenn du mehr als 9 Kekse hast, gibt es aber ein Problem: Wir haben nur 10 verschiedene Ziffern (0, 1, 2, ..., 9). Deswegen bildest du die nächste Zahl, also die 10, indem du zwei Ziffern kombinierst (also die 1 und die 0).
Irgendwann lernt man in der Schule, dass Ziffern je nach Position in einer Zahl eine andere Bedeutung haben, und gibt den Stellen einen Namen: In der Zahl 1234 nimmt die Ziffer "4" die Rolle der Einer ein, die "3" die der Zehner, die "2" die der Hunderter und die "1" die der Tausender. Wäre die Zahl länger, gäbe es noch die Zehntausender, Hunderttausender, und so weiter. Diese Namen geben den Wert der Ziffer an einer Stelle an. Der gesamte Wert einer Zahl abcd ergibt sich also aus den Ziffern a, b, c und d wie folgt:
Wert = 1000 * a + 100 * b + 10 * c + 1 * d
Für eine Zahl mit n Ziffern a_i gilt:
Wert = Summe von i = 0 bis n über 10^i a_i

Angenommen, es gäbe jetzt keine 10 verschiedene Ziffern, sondern nur 2. Dann kannst du ganz analog anfangen zu zählen: 0, 1
Jetzt gibt es das selbe Problem, es gibt keine Ziffern mehr; also fängst du an, Ziffern zu kombinieren:
0, 1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011, 1100, 1101, 1110, 1111, ...
Die Stellenwerte der Ziffern sind jetzt nicht mehr Einer, Zehner, Hunderter sondern Einer, Zweier, Vierer, ... und der Wert ergibt sich nun aus
Wert = Summe von i = 0 bis n über 2^i a_i

Für "Bitflags" hast du jetzt eine Zahl, und möchtest damit speichern, welche Gruppen einer Nutzer hat; anstatt das aber direkt über den Wert der Zahl zu speichern, siehst du jede Ziffer der Zahl als einen booleschen Wert, der angibt, ob der Nutzer in einer Gruppe ist oder nicht. Angenommen, du hast die Gruppen g_1, ..., g_n. Dann gibt das erste Bit (die Einer) an, ob der Nutzer in g_1 ist oder nicht, das zweite Bit (Zweier) gibt an, ob es in g_2 ist, usw. Allgemein also: Das Bit mit dem Stellenwert 2^i gibt an, ob der Nutzer in Gruppe g_(i + 1) ist.

Jetzt brauchst du noch eine Möglichkeit, komfortabel einzelne Bits (also Ziffern einer binären Zahl) zu lesen und zu setzen. Dazu kannst du zum Beispiel folgenden Code nutzen, wobei $status deine Variable ist:

Nutzer in Gruppe g_i zuweisen: $status |= (1 << (i - 1))
Ist Nutzer in Gruppe g_i? (($status >> (i - 1)) & 1)
Nutzer aus Gruppe g_i löschen: $status &= ~(1 << (i - 1))
algernong is offline  
Thanks
1 User
Reply




All times are GMT +2. The time now is 23:52.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.