0 votes
in SoSci Survey (dt.) by s134902 (130 points)
edited by s134902

Hello,

(GERMAN VERSION BELOW)

I am in need for help regarding an array/ random question generation.
I am using a random generator to select 5 out of 22 questions and each of those is supposed to be shown on a seperate page. On top of that, 4 questions (the same for each of the 5 above) should be shown on each of the 5 pages as well.

For example: I randomly select questions 1, 4, 6, 8, 21. So the 5 pages are:
(1) Q1, Q100, Q101, Q102, Q103, Q104
(2) Q4, Q100, Q101, Q102, Q103, Q104
(3) Q6, Q100, Q101, Q102, Q103, Q104
(4) Q8, Q100, Q101, Q102, Q103, Q104
(5) Q21, Q100, Q101, Q102, Q103, Q104

The code I have to far is:

#assign random generator number to a question
$sets = array(
1 =>'SF02',
2 => 'SF03',
3 => 'SF04',
4 => 'SF05',
5 => 'SF06',
6 => 'SF07',
7 => 'SF08',
8 => 'SF09',
9 => 'SF10',
10 => 'SF11',
11 => 'SF12',
12 => 'SF13',
13 => 'SF14',
14 => 'SF15',
15 => 'SF16',
16 => 'SF17',
17 => 'SF18',
18 => 'SF19',
19 => 'SF20',
20 => 'SF21',
21 => 'SF23',
22 => 'SF24'
);

#5 sets of the standard questions I always want to ask after the selected one
$questions = array(
array('QU01', 'QU02','QU03','QU04','QU06'), 
array('QU10', 'QU13','QU19','QU25','QU31'), 
array('QU11', 'QU14','QU20','QU26','QU32'), 
array('QU12', 'QU15','QU21','QU27','QU33'), 
array('QU07', 'QU16','QU22','QU28','QU34'));

$drawn = valueList('SF01');
$ids=array();
$counter=0;

#merge the selected question to a set of standard questions and merge them into one big array

foreach ($drawn as $code) {

  array_splice($questions[$counter], 0, 0, $sets[$code]);
  $ids = array_merge($ids, $questions[$counter]);
  $counter = $counter +1;
  }

registerVariable($ids);

$i = loopPage(count($ids));
show($ids[$i]);

Now the selection works, but the set I want on the same page are all shown on individual pages. Does anyone have any hints on how to show multiple questions on the same page?

Thanks a lot and let me know if anything is unclear or you need more information!
Ricarda


DEUTSCH:
Hallo,

Ich brauche Hilfe bei der Verwendung von Arrays und dem Zufallsgenerator.
Ihc nutze einen Zufallsgenerator, um 5 aus 22 Fragen auszuwählen, die ich dann auf einzelnen Seiten anzegen will. Zusätzlich sollen auf jeder der 5 Seiten noch $ weitere Fragen (immer die gleichen) mit dem jeweils gewählten Zufallsfrage angezeigt werden.

Beispiel:Der Zufallsgenerator zieht Fragen 1, 4, 6, 8, 21. Die 5 Seiten sind dann:
(1) Q1, Q100, Q101, Q102, Q103, Q104
(2) Q4, Q100, Q101, Q102, Q103, Q104
(3) Q6, Q100, Q101, Q102, Q103, Q104
(4) Q8, Q100, Q101, Q102, Q103, Q104
(5) Q21, Q100, Q101, Q102, Q103, Q104

Bisher habe ich folgenden Code:

#Zuordnung der Zufallszahlen zu Fragen
$sets = array(
1 =>'SF02',
2 => 'SF03',
3 => 'SF04',
4 => 'SF05',
5 => 'SF06',
6 => 'SF07',
7 => 'SF08',
8 => 'SF09',
9 => 'SF10',
10 => 'SF11',
11 => 'SF12',
12 => 'SF13',
13 => 'SF14',
14 => 'SF15',
15 => 'SF16',
16 => 'SF17',
17 => 'SF18',
18 => 'SF19',
19 => 'SF20',
20 => 'SF21',
21 => 'SF23',
22 => 'SF24'
);

#5 Sets der Standardfragen, die immer gezeigt werden sollen (5 verschiedene Sets, da jede Frage nur einmal gewählt werden darf -aber einfach Kopien voneinander)

$questions = array(
array('QU01', 'QU02','QU03','QU04','QU06'), 
array('QU10', 'QU13','QU19','QU25','QU31'), 
array('QU11', 'QU14','QU20','QU26','QU32'), 
array('QU12', 'QU15','QU21','QU27','QU33'), 
array('QU07', 'QU16','QU22','QU28','QU34'));

$drawn = valueList('SF01');
$ids=array();
$counter=0;

#Die Zufallsfrage mit einem Standardset mergen und in einen Array fügen

foreach ($drawn as $code) {

  array_splice($questions[$counter], 0, 0, $sets[$code]);
  $ids = array_merge($ids, $questions[$counter]);
  $counter = $counter +1;
  }

registerVariable($ids);

$i = loopPage(count($ids));
show($ids[$i]);

Die Auswahl und Zuordnung zu den Standardfragen funktioniert, aber jede Frage wird einzeln angezeigt - insgesamt also 5*5= 25 Seiten. Hat jemand eine Idee, was ich ändern muss, damit immer 5 Fragen zusammen auf einer Seite angezeigt werden?

Vielen Dank - und lasst mich gern wissen, wenn was unklar ist oder mehr Informationen benötigt werden!

by SoSci Survey (304k points)
Tipp: Mit dem Knopf {} beim Erstellen der Frage kann man Code (vorher markieren) als solchen formatieren.
by s134902 (130 points)
Danke für den Hinweis!

1 Answer

+1 vote
by SoSci Survey (304k points)
selected by s134902
 
Best answer

Die 25 Wiederholungen kommen hierher:

foreach ($drawn as $code) {
  array_splice($questions[$counter], 0, 0, $sets[$code]);
  $ids = array_merge($ids, $questions[$counter]);
  $counter = $counter +1;
}

Hier "verlängern" Sie das Array $ids um den Faktor 5 - und sorgen dafür, dass alle Fragen auf einzelnen Seiten abgefragt werden.

Lassenn Sie diesen Block einmal weg und versuchen Sie es wie folgt:

$i = loopPage(count($ids));
$code = $ids[$i];
// Die rotierte Frage
show($sets[$code]);
// Die anderen 5 Fragen
foreach ($questions[$i] as $question) {
  question($question);
}

Jetzt haben Sie aber in der Auswertung noch das Problem, dass die 5 Fragen noch nicht passend zur Original-Frage angezeigt werden. Die Fragen QU01 bis QU06 gehören also immer zu einer anderen Frage. Wenn Sie keine 25 Rubriken für die 25x5 Fragen anlegen möchten, dann sollten Sie sich die Option von Multi-Level-Fragebögen ansehen.

by s134902 (130 points)
Danke für die Hilfe! Das funktioniert erstmal.
Eine andere Option: Ich könnte für jedes der 5 Sets eine eigene Seite einrichten, mit festzugeordneten Standardfragen für jede Seite und dann jeweils die 1.-5. gezogene Zahl abrufen und mit zuordnen. Und wenn ich weiß, welche Frage auf welcher Seite gezogen wurde, müsste ich die Fragen ja auch den Standardfragen zuordnen können oder?
by SoSci Survey (304k points)
Zuordnen *können* Sie auch in der obigen Lösung. Von der Datenstruktur bekommen Sie dasselbe als wenn Sie es auf 5 Seiten verteilen.

Aber es ist eben recht mühsam in der Auswertung. Eine Multi-Level-Struktur könnte für Ihr Design besser geeignet sein. Aber ich gehe davon aus, dass Sie bereits wissen, wie die Auswertung genau ablaufen soll und welche Daten Sie dafür in welchen Variablen benötigen. Insofern können Sie das besser beurteilen als ich :)

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

...