0 votes
in SoSci Survey (dt.) by s064504 (195 points)
edited by SoSci Survey

Hallo,

ich benutze für einen Fragebogen folgenden php code für eine Blockrandomisierung:

// Erst einmal die Seitenkennungen als Array speichern
$rotation = array( 'A' => 'A1-A23', 'B' => 'B1-B23', 'C' => 'C1-C23', 'D' => 'D1-D23');

// Jetzt noch die Reihenfolge der Blöcke zufällig mischen
shuffle($rotation);

// Jetzt das Ergebnis noch als Seitenabfolge festlegen
// Weiter soll es anschließend mit Seite 'ende' gehen
setPageOrder($rotation, 'ende');

Nun möchte ich gerne noch über einen interne Variable erfassen, welcher Block an welcher Stelle bei jeder Versuchsperson präsentiert wurde. In vorherigen Fragebögen, hatte ich jedoch nur einzelne Fragen randomisiert und folgenden php code verwendet, wobei ich entsprechend der Anzahl der zu randomisierenden Fragen ebenso viele "items" / Variablen erstellt hatte. Der php Code für die Randomisierung der Fragen war:

if (!isset($pages)) {
  $pages = array('e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7','e8');
  shuffle($pages);
  $pages[] = 'filler'; 							#seite nach randomisierung
  registerVariable($pages);
}
setPageOrder($pages);

und der code für die Interne Variable war folgender:

for ($i=0; $i<count($pages); $i++) {
  // Kennung der internen Variable aus Frage-Kennung plus Index erstellen
  $id = id('IV01', $i + 1);  
  // Hier den Wert aus dem Array speichern
  put($id, $pages[$i]);
}
question('IV01', 'css-class=false', 'css-style=false');  // IV01

An sich hatte ich probiert ähnlich zu dem oben stehenden Code der Internen Variable den Variablennamen "pages" durch "rotation" auszutauschen, was aber nicht funktioniert. Theoretisch hab ich ja nur 4 Blöcke und müsste nur wissen welcher Block wann präsentiert wurde.

by SoSci Survey (302k points)
Tipp: Der {} Knopf formatiert PHP-Code als solchen. Ich habe das in Ihrer Frage oben schonmal geändert.
by SoSci Survey (302k points)
Noch ein wichtiger Hinweis: Man kann setPageOrder() nicht verschachteln. Stellen Sie bitte sicher, dass die eine Seitenabfolge abgeschlossen ist bevor die nächste beginnt. Sonst wird die erste durch den zweiten Aufruf von setPageOrder() abgebrochen.

1 Answer

0 votes
by SoSci Survey (302k points)

An sich hatte ich probiert ähnlich zu dem oben stehenden Code der Internen Variable den Variablennamen "pages" durch "rotation" auszutauschen, was aber nicht funktioniert.

Im Prinzip sollte es aber funktionieren. Lassen Sie nur bitte folgende Zeile unbedingt (!) weg:

question('IV01', ...);

Das führt nämlich dazu, dass die internen Variablen nochmal als versteckte Eingabefelder auf der Fragebogen-Seite eingebaut werden. Und wenn man auf "Weiter" klickt, wird u.U. das überschrieben, was Sie vorher mit put() aufwändig in die Variable speichert haben.

Wenn es weiterhin nicht funktioniert, ergänzen Sie unter dem shuffle() bitte folgende Zeile:

debug($rotation);

... und teilen Sie hier kurz mit, was die Debug-Information zeigt (komplett) und was im Datensatz in den internen Variablen gespeichert wird.

Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

...