Ik ben bezig met een scriptje om te kijken hoeveel mensen in een bepaalde range zitten met het aantal berichten dat ze gepost hebben op t forum. Bijvoorbeeld: Aantal mensen met 0 - 49 berichten: 3 Aantal met 50 - 99 berichten: 1 etc. Nu denk je misschien nou dan maak ik een while loopje en tel alle waarden met SQL queries, maar dit geeft al snel 200 queries. Daarom bedacht ik, als ik nu alle posts in een keer (gesorteerd van laag naar hoog) in een array zet, dan tel ik ze dan een voor een. Ik ben toen ijverig gaan coden maar toen ik het eerste stukje af had stuitte ik al op een probeem:
Dit is een stukje uit de code, de array die je hierboven ziet, is een denkbeeldig stukje van het aantal posts van de users. Het werkt allemaal perfect als er nooit meer dan 50 posts verschil zit tussen opeenvolgende users. Maar dit hoeft natuurlijk helemaal niet. Kijk maar naar het einde van de array je ziet dat het aantal users opeens >100 meer is. De output die dit script geeft is:
0 - 50 2 |50 - 100 1 |100 - 150 1 |150 - 200 0 |
Dit klopt natuurlijk helemaal niet, hij heeft de laatste 2 waardes weggelaten. Wat doe ik hier fout? Pak ik dit probleem wel goed aan, of is mijn manier veeeel te omslachtig?
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
| <? //Stel de array met de waardes vast $post_array = array(3, 4, 70, 110, 220, 234, 244); $member['POST_COUNT'] = 0; //ga iedere waarde in array langs foreach($post_array as $post_value) { // Alle waardes <1000 moeten verdeelt worden in 'stukjes' van 50 if ($post_value < 1000) { $post_block = 50; //Geef waardes aan de variables die bepalen in welk groepje //een waarde valt if(!isset ($post_lowest) && !isset($post_highest)) { $post_lowest = 0; $post_highest = $post_block; } // Kijk of waarde in het groepje hoort, zo ja count+1 if($post_value < $post_highest && $post_value >= $post_lowest) { $member['POST_COUNT'] = $member['POST_COUNT']+1; } //Niet bij dat groepje, dan output geven en de waardes //van r_highest/lowest verhogen met 50 else { $member['POST_RANGE'] = "$post_lowest " . "-" . " $post_highest"; echo "$member[POST_RANGE] $member[POST_COUNT] |"; $post_lowest = $post_highest; $post_highest = $post_highest + $post_block; // ZEt count weer op 0 $member['POST_COUNT'] = 0; // Kijken of hij na verhoging van 50 wel meegeteld wordt, zo ja count+1 if($post_value < $post_highest && $post_value >= $post_lowest) { $member['POST_COUNT'] = $member['POST_COUNT']+1; } } } } ?> |
Dit is een stukje uit de code, de array die je hierboven ziet, is een denkbeeldig stukje van het aantal posts van de users. Het werkt allemaal perfect als er nooit meer dan 50 posts verschil zit tussen opeenvolgende users. Maar dit hoeft natuurlijk helemaal niet. Kijk maar naar het einde van de array je ziet dat het aantal users opeens >100 meer is. De output die dit script geeft is:
0 - 50 2 |50 - 100 1 |100 - 150 1 |150 - 200 0 |
Dit klopt natuurlijk helemaal niet, hij heeft de laatste 2 waardes weggelaten. Wat doe ik hier fout? Pak ik dit probleem wel goed aan, of is mijn manier veeeel te omslachtig?