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

0 votes

Hallo zusammen,

ich habe eine Filterfrage(Avatar1), die zu einer gewissen Anzahl an Seiten führen soll.
Diese Seiten sollten randomisiert dargestellt werden. Soweit so gut, es handelt sich um 60 Seiten, die randomisiert dargestellt werden sollen. Die 60 Seiten werden auch randomisert, allerdings werden 10 dieser Seiten erneut dargeboten (man sieht dabei auch die gewählte Antwort), woraufhin die erneut gewählten Antworten, die vorhergehenden überschreiben.
Wie schaffe ich es also, dass die randomisierung "stoppt"?

Hier meine beiden Code-Schnipsel, beide befinden sich jeweils auf der Seite vor Randomisierungsstart und haben dasselbe Resultat.

Version1:

$blocks = array();
if ((value('Avatar1') == 1)) {
$blocks[] = 'DA01-DA60';
}
if ((value('Avatar1') == 2)) {
$blocks[] = 'DB01-DB60';
}
if ((value('Avatar1') == 3)) {
$blocks[] = 'DC01-DC60';
}
if ((value('Avatar1') == 4)) {
$blocks[] = 'DD01-DD60';
}
shuffle($blocks);
setPageOrder($blocks);

Version2:

$seiten1 = array('DA01','DA02','DA03','DA04','DA05','DA06','DA07','DA08','DA09','DA10','DA11','DA12','DA13','DA14','DA15','DA16','DA17','DA18','DA19','DA20','DA21','DA22','DA23','DA24','DA25','DA26','DA27','DA28','DA29','DA30','DA31','DA32','DA33','DA34','DA35','DA36','DA37','DA38','DA39','DA40','DA41','DA42','DA43','DA44','DA45','DA46','DA47','DA48','DA49','DA50','DA51','DA52','DA53','DA54','DA55','DA56','DA57','DA58','DA59','DA60');
shuffle($seiten1);
setPageOrder($seiten1);

Danke!

in SoSci Survey (dt.) by s085346 (185 points)
edited by SoSci Survey

1 Answer

0 votes
 
Best answer

Die erste Version hat ein paar Problemlechen. Ich gehe einmal davon aus, dass "Avatar1" eigentlich durch eine gültige Variablenkennung ersetzt wird. Dann kann nur in einem der 4 IF-Teile die Bedingung erfüllt sein. Und mithin wird $blocks immer nur eine einzige Seitendefinition enthalten (z.B. "DA01-DA60"). Das Mischen eines einzigen Elements hat keinen Effekt. Wenn Sie Mischen möchten, müssen Sie alle Kennungen eintragen. Allerdings können Sie es sich dabei einfacher machen, als alles zu tippen:

if ((value('Avatar1') == 1)) {
  $section = 'DA';
} elseif ((value('Avatar1') == 2)) {
  $section = 'DB';
} // u.s.w.
$pages = array();
for ($i=1; $i<=60; $i++) {
  $pages[] = $section.sprintf('%02d', $i);
}
shuffle($pages);
$pages[] = 'done';
setPageOrder($pages);

Der ganze obere Teil macht einfach nur das, was Sie in Version 2 händisch gemacht haben.
Nach dem shuffle() finden Sie aber das eigentlich relevante für Ihre Frage:

Sie müssen setPageOrder() verraten, wo es nach der letzten Seite weitergehen soll. In diesem Fall eine Seite mit der Kennung "done". Sonst macht SoSci Survey einfach auf der Seite nach, welche nach der letzten kommt. Wenn die letzte also zufällig "DA01" ist, dann geht's nochmal mit DA02, DA03, ... weiter.

Ich vermute einmal stark, dass Sie pro Seite einfach nur eine Frage präsentieren. Ehrlich gesagt ist es dann ziemlich widersinnig und aufwändig, dass Sie 4x60 = 240 Seiten anlegen. Sie könnten auch einfach nur die Fragen anzeigen. Der folgende Code würde das alles auf einer Seite erledigen:

if (!isset($questions)) {
    if ((value('AV01') == 1)) {
      $section = 'DA';
    } elseif ((value('AV01') == 2)) {
      $section = 'DB';
    } elseif ((value('AV01') == 3)) {
      $section = 'DC';
    } elseif ((value('AV01') == 4)) {
      $section = 'DD';
    }
    $questions = array();
    for ($i=1; $i<=60; $i++) {
      $questions[] = id($section, $i);
    }
    shuffle($questions);
    registerVariable($questions);
}
$i = loopPage(count($questions));
question($questions[$i]);
by SoSci Survey (81.7k points)
selected by s085346
Vielen Dank für die rasche Antwort mit der perfekten Lösung und für die ausführliche Erklärung!
...