0 votes
in SoSci Survey (dt.) by s193680 (110 points)
edited by SoSci Survey

Hallo SoSciSurvey-Team/Community,

ich möchte mehrere Fragen aus einer Rubrik randomisiert über mehrere Seiten in meiner Befragung darstellen.
Die Randomisierung / Rotation hat mit dem PHP-Code nach Anleitung wunderbar funktioniert. Danach kenne ich nur die Möglichkeiten alle Fragen auf einer Seite oder aber jede Frage auf einzelnen Seiten darzustellen.

Wie kann ich z.B. 24 Fragen (je 2 Items) randomisiert verteilt auf 4 Seiten darstellen?

Vielen Dank vorab!

Mein bisher verwendeter Code:

// Teil 1: Liste der Fragen erstellen und mischen
if (!isset($fragen)) {
  // Liste der Frage-Kennungen definieren
  $fragen = ['FE02', 'FE03', 'FE04','FE05','FE06', 'FE07', 'FE08', 'FE09',...'FE28'];
  // Die Liste zufällig mischen
  shuffle($fragen);
  // Die Rotation für eine eventuelle Wiederholung der Seite zwischenspeichern
  registerVariable($fragen);
}
// Teil 2: Fragen anzeigen
foreach ($fragen as $kennung) {
  question($kennung);
}

1 Answer

0 votes
by SoSci Survey (302k points)

Wie kann ich z.B. 24 Fragen (je 2 Items) randomisiert verteilt auf 4 Seiten darstellen?

Verwenden Sie dafür entweder die Funktion array_chunk() oder dividieren Sie die Zahl der Fragen durch zwei und multiplizieren Sie beim Index entsprechend.

// Teil 2: Fragen anzeigen
$i = loopPage(count($fragen) / 2);
question($fragen[$i * 2]);
question($fragen[$i * 2 + 1]);
by s130443 (185 points)
Ich schalte mich kurz ein, weil ich mit in diesem Projekt arbeite. Vielen Dank für die Antwort, der Tipp funktioniert (danke!!), wenn ich folgendes schreibe:

// Teil 2: Fragen anzeigen
$i = loopPage(count($fragen) / 6);
question($fragen[$i * 6]);
question($fragen[$i * 6 + 1]);
question($fragen[$i * 6 + 2]);
question($fragen[$i * 6 + 3]);
question($fragen[$i * 6 + 4]);
question($fragen[$i * 6 + 5]);

Nun ist es so, dass sich die Fragen nicht automatisch auf die Seite verteilen dürfen (über den loop), weil wir eine Blockweise-Randomisierung nutzen möchten, die zu Beginn des Fragebogens die Blöcke über die Seitenkennungen definiert und shuffled). Wenn ich also den loop mit Nutzung von array_chunk() umgehe, gelange ich zu folgendem Code:

  // Die Liste zufällig mischen
  shuffle($fragen);
  // Die Liste in Teillisten à 6 Items teilen
  $fragen = array_chunk($fragen, 6);
  // Die Variable für andere Seiten verfügbar machen
registerVariable($fragen);
}
 
// Erste Seite
question($fragen[0]);

//Zweite Seite
question($fragen[1]);

//Dritte und vierte Seite im selben Schema.

Das Problem ist nun, dass die 6 Fragen übereinandergelegt bzw. nebeneinander gelegt werden, statt untereinander auf einer Seite präsentiert zu werden (ich kann leider hier im Kommentar kein Foto anfügen). Die Darstellung ist also völlig falsch und eine Beantwortung unmöglich.
Wie gelingt es, dass die Fragen untereinander präsentiert werden?

Wir sind sehr dankbar für einen Tipp!
Beste Grüße
by SoSci Survey (302k points)
> Das Problem ist nun, dass die 6 Fragen übereinandergelegt bzw. nebeneinander gelegt werden, statt untereinander auf einer Seite präsentiert zu werden

Das klingt ... interessant. Posten Sie doch mal einen Pretest-Link, damit wir uns das ansehen können.

Am PHP-Code kann das eigentlich nicht liegen. Ich verdächtige eher eine CSS-Anweisung im Layout und/oder HTML-Code, welchen Sie auf der Seite oder in einer Frage verwenden.

Wenn Sie eine neue Frage im Online-Support anlegen, können Sie dort auch ein Bild posten. Allerdings werde ich einen Pretest-Link brauchen, um mir den HTML-Code anzusehen.
by s130443 (185 points)
Vielen Dank für die schnelle Antwort!

Das ist der Pretest-Link: https://www.soscisurvey.de/tutorial280209/?act=I1Ny7bwaSTYb1ChXw4N4hHm3

Ich habe die betreffende Seite auf Seite 2 verschoben, damit Sie es direkt sehen können.
Beste Grüße und danke fürs Drüberschauen!
by SoSci Survey (302k points)
Es scheint so, als hätten Sie da ungewollt eine kombinierte Frage gebaut.

Bitte fügen Sie in Ihrem PHP-Code zusätzlich noch folgende Zeilen ein und berichten sie, was im Debug.Modus angezeigt wird.

debug($fragen);
debug($fragen[$i * 6]);

Das Problem dürfte am array_chunk() liegen. Das zerlegt das Array in Teil-Arrays. Und das bedeutet, dass Sie nun in $fragen[0] nicht mehr die Kennung einer einzelnen Frage haben, sondern ein Array von 6 Fragen.

Wenn Sie dieses Array an den Befehl question() übergeben, interpretiert der Befehl das so, als wollten Sie eine kombinierte Frage anzeigen. Sie müssten also stattdessen schreiben:

$i = loopPage(count($fragen));
question($fragen[$i][0]);
question($fragen[$i][1]);
question($fragen[$i][2]);
question($fragen[$i][3]);
question($fragen[$i][4]);
question($fragen[$i][5]);
by s130443 (185 points)
edited by SoSci Survey
Danke für die Antwort!

Wenn ich unter meinen php-Code die beiden Zeilen angebe, werden mir folgende Debug-Informationen ausgeworfen:

Debug-Information für $fragen:
0[Array], 1[Array], 2[Array], 3[Array]

Debug-Information für $fragen[$i * 6]:
0FE14, 1FE09, 2FE08, 3FE20, 4FE22, 5FE25

Gleichzeitig eine php-Fehlermeldung, weil ja die Variable $i in diesem Code nicht definiert ist.

Das mit dem Loop funktioniert wiederum problemlos.
Das Problem ist dann aber, dass meine blockweise Randomisierung nicht funktioniert. Hier arbeiten wir mit setPageOrder, was ja vom Loop aufgehoben wird.
Gibt es auch ohne den Loop noch eine Lösung?
Beste Grüße
by SoSci Survey (302k points)
> Das Problem ist dann aber, dass meine blockweise Randomisierung nicht funktioniert. Hier arbeiten wir mit setPageOrder, was ja vom Loop aufgehoben wird.

Sie können natürlich auch 6 Seiten anlegen und dort den PHP-Code mit jeweils einem fixen $i platzieren. Hier der Übersichtlichkeit halber mal mit foreach statt mit 6 Kopien der Zeile:


$i = 0;
foreach ($fragen[$i] as $frageID) {
  question($frageID);
}

Oder Sie packen den Wert direkt in die Schleife:

foreach ($fragen[0] as $frageID) {
  question($frageID);
}

Auf der zweiten Seite dann entsprechend

foreach ($fragen[1] as $frageID) {
  question($frageID);
}
by s130443 (185 points)
Perfekt, so klappt es! Vielen Dank für die schnelle Hilfe!

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

...