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

Hallo, ich habe eine Frage bezüglich der zufälligen Abfolge von Blöcken in meinem Fragebogen. Jeder Block besteht aus zwei Seiten:
z.B. Seite 1 :

 $code = value('R001');
if ($code == 1) {
   text('F002');
} elseif ($code == 2){
   text('D002');
}

und Seite 2:

if (!isset($fragen1)) {
  $fragen1 = array(  
    'F101',
    'F102',
    'F103',
    'F104',
    'F105',
    'F106'
  ); shuffle($fragen1);
    
  registerVariable($fragen1);
}
 $i = loopPage(count($fragen1));
question($fragen1[$i]);

Insgesamt gibt es 18 von diesen Blöcken in meinem Fragebogen. Für die Rotation der Blöcke habe ich jeweils die Kennung der ersten Seiten mit B1Start, B2Start etc. und die der zweiten Seiten mit B1End, B2End, etc. eingetragen und folgenden PHP-Code definiert:

if (!isset($blocks)) {
  // Liste der Seiten definieren
  $blocks = array(
array('B1Start-B1End'),
array('B2Start-B2End'),
array('B3Start-B3End'),
array('B4Start-B4End'),
array('B5Start-B5End'),
array('B6Start-B6End'),
array('B7Start-B7End'),
array('B8Start-B8End'),
array('B9Start-B9End'),
array('B10Start-B10End'),
array('B11Start-B11End'),
array('B12Start-B12End'),
array('B13Start-B13End'),
array('B14Start-B14End'),
array('B15Start-B15End'),
array('B16Start-B16End'),
array('B17Start-B17End'),
array('B18Start-B18End'));
  // Liste mischen
  shuffle($blocks);
  // Die Seite ergänzen, wo es nachher weiter geht
  $blocks[] = 'SD';
  // Reihenfolge zwischenspeichern, um spätere Änderung zu vermeiden
  registerVariable($blocks);
}
setPageOrder($blocks);

und diesen auf die Seite vor der 1.Seite des 1.Blocks gesetzt. In der Vorschau funktioniert es auch, dass die Blöcke in zufälliger Reihenfolge angezeigt werden. Allerdings sind es nicht alle 18, sondern viel weniger. Was muss ich verändern, damit mir alle 18 Blöcke zufällig angezeigt werden ? Bin leider noch Anfänger in SosciSurvey.

Für eine Antwort wäre ich sehr dankbar. Liebe Grüße

by s145677 (150 points)
Ich muss mich verbessern: Die Rotation funktioniert nicht. Es wird zufällig mit einem der 18 Blöcke begonnen und dann mit den nachfolgenden Blöcken weitergemacht.

1 Answer

0 votes
by SoSci Survey (289k points)

Die Funktionen loopPage() und setPageorder() können nicht verschachtelt werden. Das heißt: Wenn Sie innerhalb einer Seitenabfolge ein loopPage() aufrufen, wird die Seitenabfolge beendet und nach dem loopPage() geht es einfach mit der nächsten Seite weiter.

Sie müssten dementsprechend gleich zu Beginn ein Arary mit allen Fragen und Texten erstellen, das Sie dann mittels loopPage() abarbeiten.

Packen Sie dafür zunächst alle benötigten Informationen in ein (mehrfach) verschachteltes Arrray:

$infos = [
  // Der erste Eintrag entsprechend dem was Sie oben geschrieben haben für Seite 1+2
  [
    'random' => 'R001',
    'texte' => ['F002', 'D002'],
    'fragen' => [
      'F101',
      'F102',
      'F103',
      'F104',
      'F105',
      'F106'
    ]
  ]
  // Und das dann für alle Blöcke
];

Nun ist es ein leichtes, die Fragen jedes Blocks zu mischen:

foreach (array_keys($infos) as $i) {
  shuffle($infos[$i]['fragen']);
}

Und die Blöcke können Sie natürlich genauso mischen:

shuffle($infos);

Zuletzt müssen Sie das noch so umsortieren, dass Sie eine neue Liste haben, die jeweils die Frage pro Seite enthält:

$fragen = [];
foreach ($infos as $info) {
  // Erstmall die Zufallszahl für den Block ziehen
  question($info['random']);
  // Daraus den Text ableiten
  if (value($info['random']) == 1) {
    $fragen[] = $info['texte'][0];
  } else {
    $fragen[] = $info['texte'][1];
  }
  // Und darunter noch die Fragen, die ja schon gemischt sind
  foreach ($info['fragen'] as $frage) {
    $fragen[] = $frage;
  }
}

Klar, dass Sie das mittels isset() und registerVariable() nur einmal machen. Und dann ist der Rest einfach:

$frage = loopPage($fragen);
show($frage);
by s145677 (150 points)
Vielen Dank für die schnelle Antwort:) !

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

...