[PHP] Scorelijsten genereren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • TwoR
  • Registratie: Augustus 2002
  • Laatst online: 16:43

TwoR

Gekleurde stippen

Topicstarter
Hoi, ik zit hier momenteel even met ene probleem ik moet voor mijn werk een soort wizard opbouwen die gebruik maakt van scorelijsten.

De opzet zit alsvolgt in elkaar.

Je maakt een vraag en daar kan je antwoorden aan toevoegen (net zoveel als je wil), Daarna kan je een volgende vraag maken met antwoorden en dan weer een volgende er kunnen ook ongelimiteerd vragen gemaakt worden. Dit gaat allemaal prima en wordt netjes in de DB opgeslagen. Alleen hoe nu verder ??

Het is de bedoeling dat er voor iedere mogelijkheid een scorelijst gemaakt word.

Voorbeeld:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Vraag 1:
Antwoord: a
Antwoord: b
Antwoord: c
Antwoord: d

Vraag 2:
Antwoord: a
Antwoord: b

Vraag 3:
Antwoord: a
Antwoord: b
Antwoord: c


Op deze manier komen er dus vragen in de databae en nu moet ik dus zorgen dat er voor iedere combinatie een scorelijst komt met een entry in de DB.

Maar nu mijn probleem hoe bereken ik dit? Volgens mij moet je het aantal antwoorden (9 in dit geval) keer het het aantal antwoorden doen en heb je op die manier dus 81 opties zo. Maar telt dit ook als je antwoorden ongelijk zijn aan elkaar dus niet bij iedere vraag een gelijk aantal antwoorden?

Ik kom er echt een niet meer uit en hoop dat 1 van jullie zowel een wiskundig wonder als een programmeur wonder is want ik zie door de bomen het bos niet meer en kom er echt niet meer uit. Als iemand alleen de wiskundige formule heeft schiet ik ook al een heel stuk op maar alle beetjes helpen op dit moment! :'(

Acties:
  • 0 Henk 'm!

Verwijderd

Ik weet niet precies wat je bedoelt, maar je kan dit formulier op 4 * 2 * 3 = 24 verschillende manieren invullen.

Acties:
  • 0 Henk 'm!

  • dingstje
  • Registratie: Augustus 2002
  • Laatst online: 02-01-2024
Ik snap je vraag niet echt, maar ik veronderstel dat je je gegevens als volgt opslaat: een tabel 'vragen', met daarin de vragen en een tabel 'antwoorden' met daarin de mogelijke antwoorden met een 'vraagid' naast. Dan zou je een query als volgt kunnen gebruiken:
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?php
// MySQL connect bla
$sqlq = mysql_query("SELECT vraagid, vraag FROM vragen");
while ($q = mysql_fetch_array($sqlq)) {
echo "{$q['vraag']}<br />";
$sqla = mysql_query("SELECT antwoordid, antwoord FROM antwoorden");
while ($a = mysql_fetch_array($sqla)) {
echo "{$a['antwoord']}<br />";
}
}
?>


Dit is natuurlijk recursief en niet echt goed voor je database, maar het geeft aan hoe je het zou moeten doen. Beter geoptimaliseerd zou zijn dat je meteen alle antwoorden ophaalt en daar dan in één keer gaat doorlopen en per vraag in een Array gooien. Die array zou er zo kunnen uit zien:

code:
1
2
3
4
5
6
Array(
    1 => Array(
        Array(10, 'a', 'appel'),
        Array(11, 'b', 'peer')
    )
)


1 is hier een vraagid en 10 en 11 zijn antwoordid's.

Ik hoop hiermee op je vraag beantwoord te hebben, anders moet je je vraag proberen duidelijker te stellen.

If you can't beat them, try harder


Acties:
  • 0 Henk 'm!

  • TwoR
  • Registratie: Augustus 2002
  • Laatst online: 16:43

TwoR

Gekleurde stippen

Topicstarter
Volgens mij niet ik zal het nog eens proberen uit te leggen:

code:
1
2
3
vraag
antwoord a
antwoord b

Hier zijn 2 mogelijkheden namelijk a of b
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
vraag1
antwoord 1
antwoord 2
antwoord 3

vraag2
antwoord 1
antwoord 2
antwoord 3

vraag3
antwoord 1
antwoord 2
antwoord 3

Hier zijn al veel mogelijk heden namelijk

111
112
113
121
122
123
131
132
133

enzo voort


en nu heb je het nog maar over 3 vragen met een gelijk aantal antwoorden op welke manier kan ik nu berekenen hoeveel mogelijkheden er zijn en wat de mogelijkheden zijn bij meerdere vragen en meerdere antwoorden terwijl het aantal antwoorden niet gelijk hoeft te zijn?

[ Voor 5% gewijzigd door TwoR op 02-02-2005 14:50 ]


Acties:
  • 0 Henk 'm!

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Hier zijn al 6 mogelijkheden namelijk:
123
132
213
231
312
321
wat dacht je van
111
222
333
112
113
221
223
331
332
122
133
...
etc?

Zoals al gezegd: 3 * 3 * 3 = 27 mogelijke antwoorden.

[ Voor 16% gewijzigd door OZ-Gump op 02-02-2005 14:50 ]

My personal website


Acties:
  • 0 Henk 'm!

  • TwoR
  • Registratie: Augustus 2002
  • Laatst online: 16:43

TwoR

Gekleurde stippen

Topicstarter
OZ-Gump schreef op woensdag 02 februari 2005 @ 14:49:
[...]
wat dacht je van
111
222
333
112
113
221
223
331
332
122
133
...
etc?
kwam ik inderdaad ook net achter zie mijn ge-editte post. Maar dat is dus mijn probleem hoe bereken ik het aantal combinaties?

Het is inderaad 3*3*3 zie het nu pas goed. Oke albast bedankt zover, nu moet ik alleen deze opties dus nog gaan opslaan in de database. Mocht iemand een suggestie hebben mag dat want ik vind dit echt een mega ingewikkelde kwestie.

[ Voor 27% gewijzigd door TwoR op 02-02-2005 14:53 ]


Acties:
  • 0 Henk 'm!

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

kwam ik inderdaad ook net achter zie mijn ge-editte post. Maar dat is dus mijn probleem hoe bereken ik het aantal combinaties?
Nogmaals: aantal antwoorden vraag 1 * aantal antwoorden vraag 2 * aantal antwoorden vraag 3 * ..... en zo verder.

My personal website


Acties:
  • 0 Henk 'm!

  • TwoR
  • Registratie: Augustus 2002
  • Laatst online: 16:43

TwoR

Gekleurde stippen

Topicstarter
OZ-Gump schreef op woensdag 02 februari 2005 @ 14:52:
[...]
Nogmaals: aantal antwoorden vraag 1 * aantal antwoorden vraag 2 * aantal antwoorden vraag 3 * ..... en zo verder.
inderdaad daar was ik ook achter zie mijn vorige post. Alleen hoe laat je PHP dan berekenen welke opties er allemaal zijn? Op de een of andere manier kan mijn verstand dat niet bevatten weet niet hoe dat komt.

Acties:
  • 0 Henk 'm!

Verwijderd

Probeer deze query eens:
code:
1
2
3
4
5
6
7
SELECT 
    vraagid, 
    COUNT(vraag) AS a_opties
FROM 
    vragen 
GROUP BY 
    vraagid

Ik ben niet echt goed in sql dus ik weet niet of het klopt. Maar ik denk dat het zoiets wel moet lukken. Je krijgt de vraagid + het aantal mogelijkheden. Vervolgens de mogelijkheden keer elkaar doen en dan ben je klaar. :)

Acties:
  • 0 Henk 'm!

  • TwoR
  • Registratie: Augustus 2002
  • Laatst online: 16:43

TwoR

Gekleurde stippen

Topicstarter
Verwijderd schreef op woensdag 02 februari 2005 @ 15:28:
Probeer deze query eens:
code:
1
2
3
4
5
6
7
SELECT 
    vraagid, 
    COUNT(vraag) AS a_opties
FROM 
    vragen 
GROUP BY 
    vraagid

Ik ben niet echt goed in sql dus ik weet niet of het klopt. Maar ik denk dat het zoiets wel moet lukken. Je krijgt de vraagid + het aantal mogelijkheden. Vervolgens de mogelijkheden keer elkaar doen en dan ben je klaar. :)
Dat is het probleem ook niet het aantal opties is wel te berekenen. Alleen welke mogelijke combinaties er zijn krijg ik nog niet voor elkaar. Mijn hersenen draaien echt op volle toeren maar er komt nog maar weinig uitzetten.

Acties:
  • 0 Henk 'm!

Verwijderd

TwoR schreef op woensdag 02 februari 2005 @ 15:31:
[...]

Dat is het probleem ook niet het aantal opties is wel te berekenen. Alleen welke mogelijke combinaties er zijn krijg ik nog niet voor elkaar. Mijn hersenen draaien echt op volle toeren maar er komt nog maar weinig uitzetten.
Kijk is naar de topics hierboven.
Daar staat toch hoe je dat kunt doen als je het aantal mogelijkheden per vraag weet.
En als het goed is krijg je het aantal mogelijkheden per vraag bij mijn query. ;)

Acties:
  • 0 Henk 'm!

  • TwoR
  • Registratie: Augustus 2002
  • Laatst online: 16:43

TwoR

Gekleurde stippen

Topicstarter
zelf heb ik nu het volgende :

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
$array_vraag1 = array();
$array_vraag2 = array();
$array_vraag3 = array();
    
$array_vraag1 = array_merge($array_vraag1, "1", "2", "3");
$array_vraag2 = array_merge($array_vraag2, "1", "2");
$array_vraag3 = array_merge($array_vraag3, "1", "2", "3", "4");
    

for($i=0; $i < count($array_vraag1); $i++){
    echo "$array_vraag1[$i]";
    echo "<br>";
}

Nu word er gewoon van vraag 1 de antwoorden afgedrukt op het scherm.
Hoe ik alle opties kan aflopen weet ik nog niet.

@ HaVri: Ik snap nog niet precies wat je bedoelt.

Acties:
  • 0 Henk 'm!

Verwijderd

TwoR schreef op woensdag 02 februari 2005 @ 16:08:
@ HaVri: Ik snap nog niet precies wat je bedoelt.
Ik dacht dat je het aantal mogelijkheden wilde dat in totaal mogelijk was.
Maar zo te zien wil je gewoon een vragenlijst maken?
Graag nog 1 keer duidelijk wat je wil hebben.

Acties:
  • 0 Henk 'm!

  • TwoR
  • Registratie: Augustus 2002
  • Laatst online: 16:43

TwoR

Gekleurde stippen

Topicstarter
oke wat ik wil is dat ik ALLE opties wil hebben die mogelijk zijn.

Voorbeeld:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
vraag 1
a
b
c

vraag 2
a
b
c

vraag 3
a
b
c


Nu heb ik drie vragen en bij elke vraag 3 antwoorden. dit zijn dus in totaal 3*3*3 = 27 opties.

Nu wil ik graag dat PHP bekijkt/berekend hoeveel opties er mogelijk zijn. Er zal dus zo'n lijst moeten komen:

aaa
aab
aac
aba
abb
abc
aca
acb
acc
baa
bab
bac
bba
bbb
bbc
bca
bcb
bcc
caa
cab
cac
cba
cbb
cbc
cca
ccb
ccc

Dus van deze 3 vragen met per stuk 3 antwoorden zijn er nu 27 mogelijk heden die hierboven staan.

Hoe laat ik PHP alle mogelijkheden maken die er mogelijk zijn.

Acties:
  • 0 Henk 'm!

  • TwoR
  • Registratie: Augustus 2002
  • Laatst online: 16:43

TwoR

Gekleurde stippen

Topicstarter
Ik kom er net achter dat je natuurlijk geen arrays kan gebruiken zoals ik heb gebruikt in de post hierboven omdat je niet weet hoeveel vragen er zijn en je kan zover ik weet geen array's on the run aanmaken en gebruiken.



Dit had natuurlijk een Edit moeten wezen maar het ging niet helemaal goed

[ Voor 21% gewijzigd door TwoR op 02-02-2005 16:32 ]


Acties:
  • 0 Henk 'm!

Verwijderd

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$vragen =  array(
    1 => array('a', 'b', 'c'),
    2 => array('a', 'b')
);


for($vraag1 = 0;$vraag1 < count($vragen[1]); $vraag1++)
{
    $antwoord1 = $vragen[1][$vraag1];
    for($vraag2 = 0; $vraag2 < count($vragen[2]))
    {
        $antwoord2 = vragen[2][$vraag2];
        echo $antwoord1.antwoord2;
       
    }
}


Ik heb ff een simpel voorbeeldje gemaakt. Ik denk dat je er nu wel uit kunt komen.

Succes.

Acties:
  • 0 Henk 'm!

  • Cloud
  • Registratie: November 2001
  • Laatst online: 17-09 10:39

Cloud

FP ProMod

Ex-moderatie mobster

Kun je niet beter, aan de antwoorden punten toekennen per vraag? Bijvoorbeeld goede antwoord is 2 punten, foute antwoord 0 en iets anders 1. Dan hoef je alleen maar een punten totaal uit te rekenen, en zit je niet met verschillende combinaties die een score bepalen. Lijkt mij makkelijker te implementeren. Of begrijp ik je probleem nu verkeerd? :) Als je echt het aantal combinaties wil weten dan heb je inderdaad het antwoord hierboven al gekregen.

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


Acties:
  • 0 Henk 'm!

Verwijderd

wolkje schreef op woensdag 02 februari 2005 @ 17:26:
Kun je niet beter, aan de antwoorden punten toekennen per vraag? Bijvoorbeeld goede antwoord is 2 punten, foute antwoord 0 en iets anders 1. Dan hoef je alleen maar een punten totaal uit te rekenen, en zit je niet met verschillende combinaties die een score bepalen. Lijkt mij makkelijker te implementeren. Of begrijp ik je probleem nu verkeerd? :) Als je echt het aantal combinaties wil weten dan heb je inderdaad het antwoord hierboven al gekregen.
Dat is waarr, maar wat je dan niet weet is welke vragen hij fout had en welke goed.
Wat hij nu doet vind ik ook maar een vreemde manier.
Het si ook niet logisch om alle mogelijke combinaties te printen.
Maar hij moet het zelf weten.

Acties:
  • 0 Henk 'm!

  • Cloud
  • Registratie: November 2001
  • Laatst online: 17-09 10:39

Cloud

FP ProMod

Ex-moderatie mobster

Verwijderd schreef op woensdag 02 februari 2005 @ 17:35:
[...]


Dat is waarr, maar wat je dan niet weet is welke vragen hij fout had en welke goed.
Wat hij nu doet vind ik ook maar een vreemde manier.
Het si ook niet logisch om alle mogelijke combinaties te printen.
Maar hij moet het zelf weten.
Dat is waar, maar als je een vraag maakt in een DB, met de bijbehorende antwoorden, kun je ook een correct_answer toevoegen, om dat op te lossen. Dan weet je per vraag of het antwoord correct is, zelfs ook nog wat het eigenlijk had moeten zijn. Het lijkt mij inderdaad ook onlogisch om alle mogelijke combinaties na te gaan, laat staan in een DB te proppen. Dan kom je op een aantalvragen^aantalvragen, aan combinaties, dat gaat wel hard ;)

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


Acties:
  • 0 Henk 'm!

  • TwoR
  • Registratie: Augustus 2002
  • Laatst online: 16:43

TwoR

Gekleurde stippen

Topicstarter
Ja oke de code van HaVri werkt wel maar wat als je 4 vragen hebt of meer? Dit staat van te voren niet vast. Dat is mijn grootste probleem zolang het statich is gaat het wel maar zodra het dinamisch moet of als het uit de database gehaald moet worden is het moeilijker.

In de optie van wolkje zie ik ook nog wel wat in. Een kijken of dat mogelijk is hier.
Het lijkt misschien wat onlogisch om alles in de DB te proppen maar tis wel noodzakelijk in dit geval.

Edit:
Na twee tellen langer gedacht te hebben, tot de conclusie gekomen dat het niet haalbaar is om met een punten telling te werken.

[ Voor 14% gewijzigd door TwoR op 02-02-2005 17:43 ]


Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
ik von dhet wel een leuk probleem dus ik dacht ik los het op :)

http://www.meneer.net/test/combinations.php

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
48
49
50
51
52
53
54
<?php
define("MIN_QUESTIONS", 3);
define("MAX_QUESTIONS", 5);
define("MIN_ANSWERS",   2);
define("MAX_ANSWERS",   4);

function print_combinations($q, &$p) {
    for($i =0; $i < count($p); $i++) {
        echo $q[$i][$p[$i]];
    }
    echo "\n";
    while($i > 1 && $i--) {
        if(isset($q[$i][$p[$i]+1])) {
            $p[$i]++; 
            print_combinations($q, $p);
        }
        elseif(isset($q[$i-1][$p[$i-1]+1])) {
            for($j = $i; $j < count($p); $j++) {
                $p[$j] = 0;
            }
            $p[$i-1]++;
            print_combinations($q, $p);
        }
    } 
}

$alphabet = "abcdefghijklmnopqrstuvwxyz";
$numCombinations = 0;
$questions = array();
$position = array();

$numQuestions = rand(MIN_QUESTIONS, MAX_QUESTIONS);
for($i = 0; $i < $numQuestions; $i++) {
    $answers = array();
    $numAnswers = rand(MIN_ANSWERS, MAX_ANSWERS);
    $numCombinations = $numCombinations > 0 ? $numCombinations * $numAnswers : $numAnswers;
    for($j = 0; $j < $numAnswers; $j++) {
        array_push($answers, substr($alphabet, $j, 1));
    }
    array_push($questions, $answers);
}

for($i =0; $i < $numQuestions; $i++) {
    array_push($position, 0);
}
        
echo "<pre>\n";
echo "number of combinations: ".$numCombinations."\n";
echo "questions:";
print_r($questions);
echo "combinations:\n";
print_combinations($questions, $position);  
echo "</pre>\n";
?>

[ Voor 34% gewijzigd door Genoil op 03-02-2005 01:04 ]


Acties:
  • 0 Henk 'm!

  • TwoR
  • Registratie: Augustus 2002
  • Laatst online: 16:43

TwoR

Gekleurde stippen

Topicstarter
_/-\o_ _/-\o_ _/-\o_ _/-\o_ _/-\o_ _/-\o_ _/-\o_ _/-\o_ _/-\o_ _/-\o_ _/-\o_ _/-\o_ _/-\o_

Mijn eeuwige dank!!! Dit is echt precies wat ik bedoelde. Ik heb het nu database gestuurd gemaakt. Nu trekt die dus mijn Database leeg van de vragen en antwoorden en maakt daar de combinaties van :)

Heeft er iemand trouwens een idee waarom de pagina gaat refreshen als er veel combinatie mogelijk heden zijn ? Als je bijvoorbeeld 7 vragen met 7 antwoorden gaat maken blijft de pagina refreshen totdat je op stop in de browser klikt.


Maar nomaals BEDANKT !!!

Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
TwoR schreef op donderdag 03 februari 2005 @ 10:52:
Heeft er iemand trouwens een idee waarom de pagina gaat refreshen als er veel combinatie mogelijk heden zijn ? Als je bijvoorbeeld 7 vragen met 7 antwoorden gaat maken blijft de pagina refreshen totdat je op stop in de browser klikt.


Maar nomaals BEDANKT !!!
graag gedaan, het is een leuk scriptje geworden :).

7 vragen 7 antwoorden zijn 823543 combi's, als je die gaat uitprinten is dat nog es maal 8 (7 chars +newline) = 6,6MB aan data. niet zo raar dat je browser dit niet zo tof vindt. Ook veel PHP configs hebben een max mem usage.

Acties:
  • 0 Henk 'm!

  • TwoR
  • Registratie: Augustus 2002
  • Laatst online: 16:43

TwoR

Gekleurde stippen

Topicstarter
uhm ja dat is natuurlijk ook wel zo maar toch jammer dat die dan refresht. ]

Ik heb nu mijn hele systeem klaar :) nog even testen en dan kan die online komen :)
Pagina: 1