login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Optellen inhoud array (Opgelost)

Offline IndexS - 28/01/2010 00:56 (laatste wijziging 28/01/2010 00:56)
Avatar van IndexSMySQL interesse Ik kom van het ene probleem in het andere  

Ik heb in een database een veld doel. Dit veld wordt gevuld vanuit een formulier met checkboxen met name="doel[]. Dit is zodat er meerdere antwoorden aangevinkt kunnen worden. Dit werk prima.

Nu wil ik het uit de db halen en weergeven. Dit gaat ook nog wel.

  1. $querydoel = mysql_query("SELECT doel FROM tabel");
  2.  
  3. while($row = mysql_fetch_array($querydoel))
  4. {
  5. foreach($row as $key => $value)
  6. {
  7. echo "Doel: $value<br>\n";
  8. }
  9. }


Het probleem waar ik tegen aanloop is het volgende.
De echo geeft:

Doel: a,b,c
Doel: b,c,d
Doel: a,b,c,d,e
Doel: a,d,e
Doel: a,c
enz enz

Nu wil ik graag de inhoud optellen en weergeven hoe vaak het voorkomt. Anders krijg ik dadelijk een eindeloos lange scrollpagina.Om bovenstaande aan te houden:

Doel:
a: 4
b: 3
c: 4
d: 3
e: 2

Hoe kan ik dat voor elkaar krijgen? Iets met SUM of COUNT??
Als iemand me op weg kan helpen dan zou dat super zijn!

6 antwoorden

Gesponsorde links
Offline Abbas - 28/01/2010 02:48 (laatste wijziging 28/01/2010 02:49)
Avatar van Abbas Gouden medaille

Crew .NET
Je kan ook gewoon zorgen dat die value in een lange string wordt gestopt met dan al die karakter gescheiden door een komma. Dan kan je die string exploden op de komma en heb je een array met alle karakters. In die array kan je dan gaan zoeken. Zoiets als dit bijvoorbeeld:

  1. $dbString = "";
  2. $querydoel = mysql_query("SELECT doel FROM tabel");
  3.  
  4. while($row = mysql_fetch_array($querydoel))
  5. foreach($row as $key => $value)
  6. $dbString .= $value . ",";
  7.  
  8. $arr = explode(",", $dbString);
  9.  
  10. function countChar($char, $arr)
  11. {
  12. $count = 0;
  13. foreach($arr as $elem)
  14. if($elem == $char)
  15. $count++;
  16. return $count;
  17. }
  18.  
  19. echo "a : " . countChar('a', $arr) . "<br />";
  20. //geeft dan die 4
Bedankt door: IndexS
Offline IndexS - 28/01/2010 10:25
Avatar van IndexS MySQL interesse De code werkt voor een groot gedeelte.
Het probleem wat er nu overblijft is dat alles verdubbeld wordt.
Zo heb ik er een aantal woorden in staan ipv letters.
Als een woord 6x voorkomt dan wordt er 12 weergegeven.
Offline Stijn - 28/01/2010 11:58
Avatar van Stijn PHP expert Eerst en vooral gebruik je een foreach lus in een while lus die maar één keer uitgevoerd wordt. Zo hoort het jongen.

  1. $query = mysql_query(...);
  2.  
  3. while($row = mysql_fetch_assoc($query)) {
  4. echo 'Doel: ' . $row['doel'];
  5. }


Voor je probleem dacht ik aan het volgende. Je maakt een array die bijhoudt welke woorden er al uit de query zijn gekomen. Als er nog een woord uitkomt en die zit in die array, dan tel je 1 op bij zijn aantal. In code komt dit neer op het volgende.

  1. $query = mysql_query(...);
  2. $woorden = array();
  3.  
  4. while($row = mysql_fetch_assoc($query)) {
  5. $explode= explode(',' , $row['doel']);
  6.  
  7. //nu is die foreach wel nodig want a,b,c is nu array('a' , 'b' , 'c')
  8. foreach($explode as $woord) {
  9. if(! array_key_exists($woord , $woorden)) {
  10. $woorden[$woord] = 1;
  11. } else {
  12. $woorden[$woord]++; //met 1 verhogen
  13. }
  14. }
  15. }
Bedankt door: IndexS
Offline IndexS - 28/01/2010 12:42 (laatste wijziging 29/01/2010 18:40)
Avatar van IndexS MySQL interesse Als ik dit echo dan komt er 11 uit. Ik heb ff in de db gekeken, maar geen enkel woord komt 11 keer voor. Iets gaat er nog niet goed.

Iemand nog een idee???  
Offline Abbas - 29/01/2010 20:46
Avatar van Abbas Gouden medaille

Crew .NET
Citaat:
De code werkt voor een groot gedeelte.
Het probleem wat er nu overblijft is dat alles verdubbeld wordt.
Dan zal er bij jouw code toch iets misgaan. Bij mij werkte m'n code perfect! 
Offline IndexS - 29/01/2010 22:03 (laatste wijziging 29/01/2010 22:34)
Avatar van IndexS MySQL interesse
titjes schreef:
[..quote..]Dan zal er bij jouw code toch iets misgaan. Bij mij werkte m'n code perfect! 


Om het te testen heb ik alleen jou code in een test pagina gezet.
En dan wordt alles maal 2 gedaan. Tot nu toe staan er 51 rijen in waarvan in 48 rijen een bepaald woord voorkomt. Resultaat: 96

De code van Stijn heb ik nu werkend. Beide super bedankt!
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.221s