Schlagen Sie vor in diesem Fall mir Arrays zu arbeiten?
Ja, in der ein oder anderen Form auf alle Fälle.
Zunächst einmal würde ich empfehlen, dass Sie sich um die Rotation der Bereiche und Situationen kümmern. Wenn Sie die Situationen als Texte angelegt haben, dann könnte das so aussehen:
$bereiche = [
['S101', 'S102', 'S103', 'S104'], // Bereich 1
['S201', 'S202', 'S203', 'S204'], // Bereich 2
u.s.w.
];
Das zu rotieren erfolgt wie hier erklärt.
// Jeden Block in sich mischen
for ($i=0; $i<count($bereiche); $i++) {
shuffle($bereiche[$i]);
}
// Das übergeordnete Array mischen
shuffle($bereiche);
Jetzt haben wir innerhalb der Bereiche eigentlich nur noch die Outcomes, die rotiert werden müssen. Sagen wir mal 1=pos. und 2=neg. Dann würden wir für jeden Bereich Folgendes machen:
$outcomes = [1,1,1,1,1,2,2,2,2,2];
shuffle($outcomes);
Nun wissen wir, welche Situationen pro Trial angezeigt werden und mit welchem Outcome. Wenn man das auf 20 Seiten getrennt darstellen will, dann mittels loopPage()
. Das könnte dann wie folgt aussehen.
if (!isset($situations)) {
$bereiche = [
['S101', 'S102', 'S103', 'S104'], // Bereich 1
['S201', 'S202', 'S203', 'S204'], // Bereich 2
u.s.w.
];
// Jeden Block in sich mischen
for ($i=0; $i<count($bereiche); $i++) {
shuffle($bereiche[$i]);
}
// Das übergeordnete Array mischen
shuffle($bereiche);
// Und noch die Outcomes ... wir haben nur 4 Situationen pro Block, oder?
$outcomes = [1,1,2,2];
$outBlocks = [];
for ($i=0; $i<count($bereiche); $i++) {
$outBlocks[$i] = $outcomes;
shuffle($outBlocks[$i]);
}
// Alles noch in eine Matrix zusammenfassen
$situations = [];
for ($i=0; $i<count($bereiche); $i++) {
for ($j=0; $j<count($bereiche[$i]); $j++) {
$situations[] = [$bereiche[$i][$j], $outBlocks[$i][$j]
}
}
registerVariable($situations);
}
// Jetzt pro Seite anzeigen
$i = loopPage(count($situations));
$text = $situations[$i][0];
$variante = $situations[$i][1];
text($text);
question(...); // Hier jetzt die zur Situation und zum Outcome passende Frage anzeigen
// alternativ als Multi-Level-Struktur implementiert
Ich habe beim Schreiben des Codes gerade bemerkt, dass ich noch ein Verständnisproblem habe, wie die 20 Situationen zu den "Bei 5 Situationen soll zuerst das positive Outcome präsentiert werden gefolgt vom negativen Outcome und bei 5 Situationen soll das negative Outcome zuerst präsentiert werden..." passt, weil ich da nur 2x5=10 Situationen zähle. Aber dieses Detail können Sie ja ggf. noch anpassen.