Ich habe 4 Blöcke in meinem Fragebogen. In jedem Teil erfolgt die Abfolge der Seiten (hier = items) gemäß einer Variablen aus einem Zufallsgenerator. Zusätzlich dazu werden in jedem Block einige Seiten aus dieser Abfolge extrahiert, in sich ge-shufflet, und dann wieder in die Abfolge eingefügt. Das passiert in jedem Block für 4 items des Typs AE und 2 items des Typs LC (siehe https://support.soscisurvey.de/?qa=4159/rotation-gewisser-seiten-zusatzlich-zu-zufallsgenerator&show=4186#c4186).
Nun würde ich in jedem Block mittels put () gerne festhalten, in welcher Reihenfolge die AE-items und die LC-items dem Teilnehmer präsentiert wurden. Hierfür habe ich 4 interne Variablen für die AE-Items (ZF09, ZF11, ZF12, ZF13, i.e. für jeden Block eine) und 4 interne Variablen für die LC-items (ZF10, ZF14, ZF15, Z16, wieder für jeden Block eine) erstellt. Die internen Variablen für die AE-items haben 4 Variablen (da hier 4 items rotieren, die internen Varialben für die LC-items haben 2 Varialben (da hier 2 items rotieren).
Den php-code habe ich pro Block jeweils unter den Code, der die Seitenabfolge/Rotation der AE bzw. LC items steuert, plaziert. Das sieht für Block 1 beispielsweise so aus:
$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;
}
for ($i=0; $i<count($freePages); $i++) {
// Rang speichern wie oben
$id = id('ZF09', $freePages[$i] + 1);
put($id, $i + 1);
}
for ($i=0; $i<count($freePages2); $i++) {
// Rang speichern wie oben
$id = id('ZF10', $freePages2[$i] + 1);
put($id, $i + 1);
}
debug($block1); // Original-Abfolge
debug($pages); // Gemischte Abfolge
debug($freePages);
debug($freePages2);
setPageOrder($pages, 'C1done');
Allerdings scheint irgendetwas nicht zu funktionieren, obwohl in der debug-Ansicht kein Fehler im php-Code angezeigt wird. Klicke ich mich durch den Fragebogen und gehe dann auf 'Daten ansehen', sehe ich immer nur einen Wert für die erste Variable der jeweiligen internen Variablen, (also ZF09_01, ZF10_01 etc.). Ich habe es dann mit einem anderen Code probiert, der nicht den Rang, sondern den Wert aus dem array speichern sollte (dieser Code funktioniert für mich in einem anderen Teil des Fragebogens, nämlich wenn ich die einzelnen Blöcke selbst shuffle und diese Reihenfolge festhalten will). Hier der code für Block 1:
for ($i=0; $i<count($freePages); $i++) {
// Kennung der internen Variable aus Frage-Kennung plus Index erstellen
$id = id('ZF09', $i + 1);
// Hier den Wert aus dem Array speichern
put($id, $freePages[$i][0]);
}
for ($i=0; $i<count($freePages2); $i++) {
// Kennung der internen Variable aus Frage-Kennung plus Index erstellen
$id = id('ZF10', $i + 1);
// Hier den Wert aus dem Array speichern
put($id, $freePages2[$i][0]);
}
Leider besteht noch immer dasselbe Problem, und ich bin mittlerweile ratlos, was falsch läuft...