Hallo miteinander,
mein Fragebogen soll grob Folgendermassen aufgebaut sein:
Block 1: Seiten 1 - 5 (B1 - B5)
Block 2: Seiten 1 - 5 (BH1 - BH5)
Block 3: Seiten 1 - 5 (BS1- BS5)
Block 4: Seiten 1 - 5 (BD1 - BD5)
Block mit sozio-demografischen Fragen (demo)
Prinzipiell wird dergleiche Block viermal wiederholt. Hierbei möchte ich jedoch folgende Randomisierungen einbauen. Was noch zu beachten ist, ist, dass ich pro Block am Anfang eine Seite mit einer Instruktion habe, die nicht randomisiert werden soll (sozusagen B0 bzw. BH0 bzw. BS0 bzw. BD0).
Randomisierung der Seiten pro Block
Alle Personen sehen zuerst Block 1 (Basismessung). Die Reihenfolge der Seiten 1 - 5 soll randomisiert und für die spätere Verwendung in einer internen Variablen (BB17) gespeichert werden.
Randomisierung der Blöcke 2-4
Als nächstes werden die Blöcke 2 bis 4 durchlaufen, wobei die Reihenfolge der Blöcke counterbalanciert werden soll. Innerhalb jeden Blockes wird die Reihenfolge der Seiten aus dem ersten Block übernommen. Dann erscheint der Block mit den sozio-demografischen Fragen.
Bisher habe ich das Randomisieren der Blöcke und der Seiten getrennt in PHP mit setPageOrder() umgesetzt, scheint aber so nicht zu funktionieren...
D.h. für die Randomisierung der Blöcke habe ich einen Zufallsgenerator (BB07) angelegt, der alle möglichen Abfolgen der drei Blöcke enthält:
1 = BH0-BH5, BS0-BS5, BD0-BD5
2 = BS0-BS5, BH0-BH5, BD0-BD5
3 = BD0-BD5, BS0-BS5, BH0-BH5
4 = BD0-BD5, BH0-BH5, BS0-BS5
5 = BS0-BS5, BD0-BD5, BH0-BH5
6 = BH0-BH5, BD0-BD5, BS0-BS5
Bevor der zweite Block beginnt, habe ich diesen PHP-Code eingebaut:
$code2 = value('BB07');
$order1 = value('BB07', 'label');
setPageOrder($order1, 'demo');
Um die Seiten einmalig im 1. Block zu randomisieren und dann die Reihenfolge in den weiteren Blöcken zu übernehmen, habe ich diesen Code verwendet:
Bevor Block 1 beginnt:
$pages = array('B1', 'B2', 'B3', 'B4', 'B5');
$indices = array_keys($pages);
shuffle($indices);
$random = array();
for ($i=0; $i<count($indices); $i++) {
$id = id('BB17', $indices[$i] + 1);
put($id, $i + 1);
$random[$i] = $pages[$indices[$i]];
}
setPageOrder($random, 'intro');
Bevor Block 2 (bzw. 3 oder 4) beginnt:
$pages = array('BH1', 'BH2', 'BH3', 'BH4', 'BH5');
$order2 = [];
foreach (getItems('BB17') as $item) {
$rank = value(id('BB17', $item));
$order2[(int)$rank - 1] = $pages[$item -1];
}
ksort($order2);
debug($order2);
setPageOrder($order2);
Es funktioniert so aber nicht, d.h. teilweise werden nicht mehr alle Blöcke (2-4) angezeigt, teilweise werden pro Block mehr als 5 Seiten angezeigt... Ich denke, ich kann wahrscheinlich nicht mehrmals setPageOrder verwenden.
Mir wurde gestern schon diese Antwort gegeben:
Im Prinzip sortieren Sie einfach 4 Seiten-Arrays in der gewünschten Reihenfolge, packen diese in ein verschachteltes Array (4 Arrays in einem Array) und mischen dieses mit shuffle() einmal. bevor Sie es an setPageOrder() übergeben. Könnt Ihr mir das Vorgehen noch genauer erläutern?
Vielen Dank!
Linda