login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Array of andere structuur (Opgelost)

Offline Drieske - 31/01/2010 14:20
Avatar van DrieskeLid Beste,

Ik heb een tabel Blocks in mijn database waarin een aantal blokken staan, dit is voor een quiz, dus ik zal de betekenis van de inhoud van de tabel niet verder uitleggen. Elk blok heeft een aantal herhalingen. Zie hier de structuur :

Citaat:
b_id b_name b_repetitions
1 Block A 9
2 Block B 9
3 Block C 8


Het is de bedoeling dat de herhalingen na elkaar komen dus bv:

AAAAAAAAABBBBBBBBBCCCCCCCC
of
BBBBBBBBBAAAAAAAAACCCCCCCC
of nog andere volgorde.

Ik zou dit graag at random in een array steken, maar ik weet niet hoe ik dit zou kunne doen, het belangrijkste is dat de volgorde van de blokken ad random is, maar wanneer blok A eerst is, moeten ook de 9 herhalingen volgen.

Mvg,
Dries

1 antwoord

Gesponsorde links
Offline Abbas - 01/02/2010 03:09 (laatste wijziging 01/02/2010 03:14)
Avatar van Abbas Gouden medaille

Crew .NET
  1. <?php
  2.  
  3. mysql_connect("*****", "*****", "*****");
  4. mysql_select_db("blokkentabel");
  5.  
  6. $strQuery = "SELECT b_name, b_repetitions FROM blokkentabel";
  7. $sqlQuery = mysql_query($strQuery) or die(mysql_error());
  8.  
  9. $i = 0;
  10. $arrayBlocks = array();
  11. $a = 0;
  12. $b = 0;
  13. $c = 0;
  14. //...
  15.  
  16. while($row = mysql_fetch_assoc($sqlQuery))
  17. {
  18. $arrayBlocks[$i++] = $row["b_name"];
  19. switch($row["b_name"])
  20. {
  21. case "Block A": $a = $row["b_repetitions"]; break;
  22. case "Block B": $b = $row["b_repetitions"]; break;
  23. case "Block C": $c = $row["b_repetitions"]; break;
  24. //...
  25. }
  26. }
  27.  
  28. shuffle($arrayBlocks);
  29.  
  30. foreach($arrayBlocks as $element)
  31. {
  32. switch($element)
  33. {
  34. case "Block A": $letter = "A"; $aantal = $a; break;
  35. case "Block B": $letter = "B"; $aantal = $b; break;
  36. case "Block C": $letter = "C"; $aantal = $c; break;
  37. //...
  38. }
  39. for($i = 0; $i < $aantal; $i++) echo $letter;
  40. }
  41.  
  42. ?>

Nadeel is dat je voor elke letter een variabele moet maken en een case voorzien voor elke letter dus volgende code is misschien handiger. Zeker in geval je veel meer letters hebt dan alleen maar a, b en c. Enige vereiste is dan dat de blokken alfabetisch in de tabel staan of je moest ze via "SORT ASC" ophalen uit je tabel. Volgend stuk komt dan in de plaats van alles onder '$strQuery':

  1. $i = 0;
  2. $arrayBlocks = array();
  3. $arrayAantallen = array();
  4.  
  5. while($row = mysql_fetch_assoc($sqlQuery))
  6. {
  7. $arrayBlocks[$i] = $row["b_name"];
  8. $arrayAantallen[$i] = $row["b_repetitions"];
  9. $i++;
  10. }
  11.  
  12. shuffle($arrayBlocks);
  13.  
  14. foreach($arrayBlocks as $element)
  15. {
  16. $letter = substr($element, strlen($element) - 1);
  17. switch($letter)
  18. {
  19. case "A": $aantal = $arrayAantallen[0]; break;
  20. case "B": $aantal = $arrayAantallen[1]; break;
  21. case "C": $aantal = $arrayAantallen[2]; break;
  22. case "D": $aantal = $arrayAantallen[3]; break;
  23. case "E": $aantal = $arrayAantallen[4]; break;
  24. case "F": $aantal = $arrayAantallen[5]; break;
  25. case "G": $aantal = $arrayAantallen[6]; break;
  26. case "H": $aantal = $arrayAantallen[7]; break;
  27. case "I": $aantal = $arrayAantallen[8]; break;
  28. //...
  29. }
  30. for($i = 0; $i < $aantal; $i++) echo $letter;
  31. }
Bedankt door: Drieske
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.191s