0 votes
in SoSci Survey (dt.) by s363901 (120 points)

Hallo, ich habe für meinen Fragebogen einen Rubrik mit 37 Fragen + einen Zufallsgenerator damit die Fragen rotieren. Jetzt habe ich mit den vorgegebenen PHP Codes nur die Möglichkeit entweder alle Fragen auf eine Seite zu tun oder jeweils eine Frage auf eine Seite. Ich hätte aber gerne 3-4 Fragen auf einer Seite. Wie kann ich das machen? Es sollen trotzdem alle Fragen aus der Rubrik mit 37 Fragen rotieren und jede Frage muss von jedem beantwortet werden.

1 Answer

0 votes
by SoSci Survey (371k points)

Bitte werfen Sie mal einen Blick in die Anleitung Rotation von Items über mehrere Seiten. Im Prinzip können Sie diesen PHP-Code in leicht abgewandelter Form auch verwenden, um eine Liste von Fragen zu mischen, diese Liste mittels array_chunk() in Blöcke von 3 oder 4 Fragen aufzuteilen, und diese dann jeweils zusamen auf einer Seite anzuzeigen.

Details gerne auf Nachfrage.

by s363901 (120 points)
Gerne die Details dazu, bin in PHP Codes nicht so gut :/
by SoSci Survey (371k points)
Nun, ein bisschen müssen Sie sich schon selbst einarbeiten. Probieren Sie mal, wie weit Sie kommen, und posten Sie den PHP-Code, was schon funktioniert, und wo es klemmt.
by s363901 (120 points)
Hallo, ich habe jetzt mehrere Tage damit verbracht eine Lösung für dieses Problem zu finden und habe auch mit Hilfe von KI versucht diesen Code irgendwie zusammen zu stellen. Klappt alles nicht. Wie nutze ich diese Code korrekt: array_chunk() muss ich einfach immer 3-4 Fragen in die klammern setzten? Allerdings wäre es dann nicht mehr komplett randomisiert oder? Ich könnte ja auch einfach aus meinem 37 Frageblock einzelne Rubriken machen aber dann wäre es auch nicht mehr richtig randomisiert. Können sie mir irgendwie noch weiterhelfen?
by SoSci Survey (371k points)
> array_chunk() muss ich einfach immer 3-4 Fragen in die klammern setzten?

Der Befehl nimmt ein Array und zerteilt es in mehrere Arrays der vorgegeben Länge. Verwenden Sie den Befehl debug(), um sich anzeigen zu lassen, was in den Variablen jeweils gespeichert ist, also z.B. wenn RG01 der Zufallsgenerator ist:

$fragen = valueList('RG01', null, 'label');
debug($fragen);
$blocks = array_chunk($fragen, 4);
debug($blocks);

Für konkretere Antworten bräuchte ich von Ihnen bitte ein paar konkretere Angaben, z.B. wie Ihr Zufallsgenerator heißt und was dort drin steht?
by s363901 (120 points)
Der Zufallsgenerator heißt NA38 und bei den Zetteln (Inhalte) steht 01 = NA01
02 = NA02
03 = NA03 bis 37 weitergeführt drinnen. Dasselbe habe ich dann auch nochmal für den Zufallsgenerator SW11 von 01=SW1 bis SW10
by SoSci Survey (371k points)
Okay, haben Sie in NA38 schon eingestellt, dass Sie pro Interview auch alle 37 Codes ziehen möchten? Anschließend probieren Sie es mit dem Code oben (unter dem Zufallsgenerator auf einer Seite platzieren), ersetzen Sie RG01 durch NA38 , und posten Sie mal, was an Debug-Infos zu $blocks angezeigt wird.
by s363901 (120 points)
Ja, das ist eingestellt. Folgendes steht bei Debug $blocks:

[0]    [0]NA15    [1]NA17    [2]NA31    [3]NA16
[1]    [0]NA21    [1]NA13    [2]NA28    [3]NA11
[2]    [0]NA14    [1]NA36    [2]NA10    [3]NA23
[3]    [0]NA33    [1]NA06    [2]NA22    [3]NA18
[4]    [0]NA02    [1]NA35    [2]NA34    [3]NA37
[5]    [0]NA24    [1]NA04    [2]NA19    [3]NA08
[6]    [0]NA03    [1]NA32    [2]NA30    [3]NA05
[7]    [0]NA26    [1]NA27    [2]NA25    [3]NA20
[8]    [0]NA09    [1]NA12    [2]NA07    [3]NA01
[9]    [0]NA29
by SoSci Survey (371k points)
Das sieht doch ganz gut aus ... naja, die letzte Frage wollen Sie vielleicht nicht einsam auf einer einzelnen Seite stehen haben, aber das kann man am Schluss noch optimieren. Rotiert sind die Fragen auch schon, wie Sie sehen. Wir  haben jetz also ein Array, das jeweils Arrays enthält.

Was wir nun brauchen, ist loopPage(), um die Seite mehrfach anzuzeigen - und bei jeder Wiederholung verwenden wir eine andere Zeile:

$block = loopPage($blocks);

Wir haben in $block nun also eine der Zeilen. Und diese Fragen müssen wir nur noch anzeigen:

foreach ($block as $id) {
  show($id);
}
by s363901 (120 points)
Ich denke es funktioniert. Vielen vielen Dank für die Hilfe!!!
by SoSci Survey (371k points)
Was die letzte, einsame Frage angeht, hier eine Möglichkeit:

$last = array_array_pop($blocks);
$blocks[2] = array_merge(
  $blocks[2],
  $last
];
by s363901 (120 points)
Mhh das funktioniert nicht: Warnung: Die Anzahl öffnender Klammern (8) und schließender Klammern (7) stimmt hier nicht überein:
$blocks[2] = array_merge(
  $blocks[2],
  $last
];

Warnung: Die Funktion array_array_pop() ist nicht bekannt.

Muss ich noch was beachten?
by SoSci Survey (371k points)
Ja, es sollte in der tat ein wenig anders aussehen:

$last = array_pop($blocks);
$blocks[2] = array_merge(
  $blocks[2],
  $last
);
ago by s363901 (120 points)
Also falls somit auf der letzen Seite 5 Fragen stehen sollte, klappt es immer noch nicht:/
Muss ich den Code auf eine bestimmte Weise anwenden oder noch etwas ändern?
ago by SoSci Survey (371k points)
Wenn Sie diesen Code unterhalb von dem debug($blocks) - siehe Beispiel oben - einfügen und darunter noch mal debug($blocks) platzieren, was wird denn dann angezeigt? Gesamt wäre der obere Teil vor der Anzeige also...

$fragen = valueList('RG01', null, 'label');
debug($fragen);
$blocks = array_chunk($fragen, 4);
debug($blocks);
$last = array_pop($blocks);
$blocks[2] = array_merge(
  $blocks[2],
  $last
);
debug($blocks);

... und dann die Anzeige via loopPage() u.s.w.
ago by s363901 (120 points)
Das hat jetzt geklappt :)
Danke !

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

...