In meinem Fragebogen befinden sich 4 Blöcke, die in randomisierter Abfolge präsentiert werden sollen.
Die Abfolge der Seiten innerhalb 1 Blocks erfolgt gemäß einer von 6 "prototypischen" Seitenabfolgen, die mittels Zufallsgenerator gezogen wird. Zusätzlich werden allerdings immer jeweils 4 und 2 Seiten aus dieser Abfolge herausgenommen und untereinander rotiert (siehe https://support.soscisurvey.de/?qa=4159/rotation-gewisser-seiten-zusatzlich-zu-zufallsgenerator&show=4186#c4186). Für diesen Befehl habe ich die Funktion setPageOrder()s 1x pro Block verwendet. Das Problem: die kommt sich dann mit dem setPageOrder() von der Rotation der Blöcke in die Quere.
Wir haben dann hier besprochen, dass ich anscheinend sämtliche Codes auf der ersten möglichen Seite platzieren müsste, aber die Details sind mir noch nicht ganz klar. Platziere ich auf dieser Seite also zuerst:
// Erst einmal die Seitenkennungen als Array speichern
$blocks = array(
'Cond1' => array('C1in', 'C1p', 'C1ready', 'C1e1', 'C1d1', 'C1aed', 'C1d2', 'C1d3', 'C1aem', 'C1lcm', 'C1e2', 'C1d4', 'C1d5', 'C1aemps', 'C1d6', 'C1lcd', 'C1aempd', 'C1d7', 'C1done'),
'Cond2' => array('C2in', 'C2p', 'C2ready', 'C2e1', 'C2d1', 'C2aed', 'C2d2', 'C2d3', 'C2aem', 'C2lcm', 'C2e2', 'C2d4', 'C2d5', 'C2aemps', 'C2d6', 'C2lcd', 'C2aempd', 'C2d7', 'C2done'),
'Cond3' => array('C3in', 'C3p', 'C3ready', 'C3e1', 'C3d1', 'C3aed', 'C3d2', 'C3d3', 'C3aem', 'C3lcm', 'C3e2', 'C3d4', 'C3d5', 'C3aemps', 'C3d6', 'C3lcd', 'C3aempd', 'C3d7', 'C3done'),
'Cond4' => array('C4in', 'C4p', 'C4ready', 'C4e1', 'C4d1', 'C4aed', 'C4d2', 'C4d3', 'C4aem', 'C4lcm', 'C4e2', 'C4d4', 'C4d5', 'C4aemps', 'C4d6', 'C4lcd', 'C4aempd', 'C4d7', 'C4done'));
// Jetzt noch die Reihenfolge der Blöcke zufällig mischen
shuffle($blocks);
for ($i=0; $i<count($blocks); $i++) {
// Kennung der internen Variable aus Frage-Kennung plus Index erstellen
$id = id('ZF05', $i + 1);
// Hier den Wert aus dem Array speichern
put($id, $blocks[$i][0]);
}
// Jetzt das Ergebnis noch als Seitenabfolge festlegen
// Weiter soll es anschließend mit Seite 'FQ0' gehen
setPageOrder($blocks, 'FQ0');
debug($blocks);
und dann sämtliche codes für die Rotatien innerhalb der Blöcke, wie z.B. (für Block 1):
$block1 = value('ZF06x1', 'label');
$pages = explode(',', $block1);
$freeIndices = array();
$freePages = array();
foreach ($pages as $i => $page) {
if (substr($page, 2, 2) == 'ae') {
$freeIndices[] = $i;
$freePages[] = $page;
}
}
shuffle($freePages);
foreach ($freePages as $j => $page) {
$orgIndex = $freeIndices[$j];
$pages[$orgIndex] = $page;
}
$freeIndices = array();
$freePages2 = array();
foreach ($pages as $i => $page) {
if (substr($page, 2, 2) == 'lc') {
$freeIndices[] = $i;
$freePages2[] = $page;
}
}
shuffle($freePages2);
foreach ($freePages2 as $j => $page) {
$orgIndex = $freeIndices[$j];
$pages[$orgIndex] = $page;
}
$vars = array(
'C1aem' => 'ZF09_01',
'C1aed' => 'ZF09_02',
'C1aemps' => 'ZF09_03',
'C1aempd' => 'ZF09_04',
'C1lcm' => 'ZF10_01',
'C1lcd' => 'ZF10_02',
);
foreach ($freePages as $rank => $page) {
if (isset($vars[$page])) {
put($vars[$page], $rank+1);
}
}
foreach ($freePages2 as $rank => $page) {
if (isset($vars[$page])) {
put($vars[$page], $rank+1);
}
}
$vars = array(
'C1aem' => 'ZF17_01',
'C1aed' => 'ZF17_02',
'C1aemps' => 'ZF17_03',
'C1aempd' => 'ZF17_04',
'C1lcm' => 'ZF21_01',
'C1lcd' => 'ZF21_02',
);
foreach ($pages as $rank => $page) {
if (isset($vars[$page])) {
put($vars[$page], $rank+1);
}
}
debug($block1); // Original-Abfolge
debug($pages); // Gemischte Abfolge
debug($freePages);
debug($freePages2);
setPageOrder($pages, 'C1done');
Und was passiert mit den 4 zusätzlichen setPageOrder-Befehlen?