0 votes
in SoSci Survey (dt.) by s296721 (150 points)

Guten Tag,

ich habe 4 Rubriken an Fragen (je 100 Stück). Ich würde nun gerne jede diese Fragen randomisiert auf jeweils einer Seite darstellen lassen. Für einzelne Rubriken funktioniert das mittels loopPage. Jedoch wäre es wichtig, die Items aus allen 4 Rubriken zu durchmischen und auch abzuspeichern, in welcher Reihenfolge die Items gezeigt wurden.

Mit "put" bin ich bislang nicht weitergekommen, da ich gerne die Itemkürzel in der gezeigten Reihenfolge speichern würde.

Über Hilfe würde ich mich sehr freuen!

1 Answer

0 votes
by SoSci Survey (327k points)

Für einzelne Rubriken funktioniert das mittels loopPage.

Das funktioniert auch mit mehreren Rubriken - Sie müssen nur die Liste, die Sie an loopPage() übergeben entsprechend bauen, z.B.

if (!isset($fragen)) {
  $fragen = array_merge(
    getQuestions('AB'),
    getQuestions('AC'),
    getQuestions('AD'),
    getQuestions('AE')
  );
  shuffle($fragen);
  registerVariable($fragen);
}
$question = loopPage($fragen);
show($question);
by s296721 (150 points)
edited by s296721
Vielen Dank, das hat funktioniert. Jedoch kann ich in den erzeugten Daten nicht die Reihenfolge der Items sehen. Wie könnte ich mir dies zusätzlich ausgeben lassen?
Ich erhalte auch den Warnhinweis: Die von shuffle erzeugten Zufallswerte werden nicht automatisch gespeichert. Mit put bin ich aber leider bislang nicht weitergekommen. Über einen Hinweis, wie ich die Reihenfolge speichern kann, wäre ich sehr dankbar
 Herzlichen Dank!

[Kurzer Hinweis was ich bereits probiert habe: Ich versuche für jeden Teilnehmenden eine interne Variable zu erzeugen und die Reihenfolge der Items in einem Textstring zu hinterlegen. Wenn ich diesen auf der entsprechenden Seite definiert habe, erhalte ich die Fehlermeldung, dass ich die Variable mehrfach referenziere. Also wäre meine Idee die Items zu Beginn des Fragebogens zu mischen, die Sortierung zu speichern und dann aus der internen Variable auszulesen

Seite 1: if (!isset($fragen)) {
    // Liste aller Fragen generieren
    $fragen = array_merge(
        getQuestions('MM'),
        getQuestions('MS'),
        getQuestions('RM'),
        getQuestions('SM'),
        getQuestions('SS')
    );

    // Zufällige Reihenfolge der Fragen erzeugen
    shuffle($fragen);
    
    // Speichere die Reihenfolge der Fragen als kommagetrennte Zeichenkette
    $reihenfolge = implode(",", $fragen);
    
    // Speichere die Reihenfolge in der internen Variable "I002_01"
    registerVariable('I002_01', $reihenfolge);
}


Seite 5:$reihenfolge = registerVariable('I002_01');

// Überprüfen, ob die Variable erfolgreich abgerufen wurde
if ($reihenfolge) {
    // In ein Array umwandeln
    $fragenArray = explode(",", $reihenfolge);

    // Fragen in der gespeicherten Reihenfolge abarbeiten
    foreach ($fragenArray as $frageID) {
        show($frageID); // Frage anhand der ID anzeigen
    }
} else {
    // Fehlerbehandlung, falls die Variable nicht abgerufen werden kann
    return 'Es gab ein Problem beim Abrufen der Fragen. Bitte versuchen Sie es später erneut.';
}

Das funktoniert jedoch leider auch nicht und das ist die Fehlermedlung: Der PHP-Code konnte nicht korrekt ausgeführt werden, eine genauere Fehlermeldung liegt aber leider nicht vor.
by s296721 (150 points)
Außerdem erhalte ich folgende Fehlermeldung: Sie speichern Zusatz-Daten mit mehr als 2KB in diesem Interview. Bitte verwenden Sie für umfangreiche Platzhakter den Befehl show anstatt replace (). Ich habe Ihren oben stehenden code verwendet--also verwende ich bereits show? Was meint diese Fehlermeldung?
by s296721 (150 points)
Ich habe es für mich gelöst. Ich dokumentiere es hier, falls sich mal jemand die gleich Frage stellt:

if (!isset($fragen)) {
  // Liste aller Fragen aus Rubrik RS
  $fragen = array_merge(
    getQuestions('RW'),
    getQuestions('SS'),
    getQuestions('SW'),
    getQuestions('WS'),
    getQuestions('WW')
    
    );
  // Die Liste der Fragen (Array) mischen und zwischenspeichern
  shuffle($fragen);

    $sortierung = implode(',', $fragen); // Fragen in einen kommagetrennten String umwandeln

   putList('I002_01', $sortierung);

  registerVariable($fragen);
}
// Alle Kennungen aus der Liste $fragen abarbeiten
$frage = loopPage($fragen);
show($frage);

Vorab habe ich eine zusätzliche interne Variable definiert in die ich für jeden Probanden den Komma seperated Text String schreibe.
by SoSci Survey (327k points)
> Jedoch kann ich in den erzeugten Daten nicht die Reihenfolge der Items sehen.

Aufgrund der großen Anzahl an Wiederholungen (Sie möchten einer einzelnen Person nicht wirklich 400 Fragen stellen, oder?) würde ich die Abfolge einfach als String in eine interne Variable speichern:

  shuffle($fragen);
  registerVariable($fragen);
  put('IV01_01', implode(',', $fragen));   // NEU

> Der PHP-Code konnte nicht korrekt ausgeführt werden, eine genauere Fehlermeldung liegt aber leider nicht vor.

Das return führt dazu, dass Sie die Ausführung abbrechen und SoSci Survey mit dem Rückgabewert (in Ihrem Fall die Fehlermeldung) nichts anfangen kann.

> Sie speichern Zusatz-Daten mit mehr als 2KB in diesem Interview.

Technisch schön ist es nicht, 400 Fragen zu stellen. SoSci Survey fragt hier nochmal nach, ob Sie wirklich ein Array mit 400 Einträgen via registerVariable() ablegen möchten. In Ihrem Fall: Ja, möchten Sie vermutlich.

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

...