0 votes
in SoSci Survey (dt.) by s085346 (300 points)

Guten Tag,

ich habe 11 Rubriken mit jeweils 26 Fragen und 11 weiter Rubriken mit 4 Fragen.
Dabei gehören immer paarweise eine der 26er und eine der 4er Rubriken zusammen.
Gibt es eine Möglichkeit, wie ich ohne alles als einzelne Seiten anlegen zu müssen, eine Rubrik A mit einer RubrikA2 kombiniere, sodass Rubrik A immer vor Rubrik A2 kommt und alle diese 2er Pärchen rotiert werden? Also:
RubrikB(26Fragen)&RubrikB2(4 Fragen), RubrikA(26 Fragen)&RubrikA2(4 Fragen), RubrikC&RubrikC2, etc.

Vielen Dank

by SoSci Survey (298k points)
Nur damit es keine Missverständnisse gibt: Sie möchten Ihren Teilnehmern wirklich 11x26+11*4 = 11*30 = 330 Fragen antun?

Wenn man die Fragen und Antwortoptionen noch lesen muss, kann man mit ca. 5 Antworten pro Minute rechnen. Solch einen Fragebogen zu beantworten würde demnach länger als eine Stunde dauern. Daher meine kritische Nachfrage.
by s085346 (300 points)
Ganz genau, das haben Sie richtig verstanden, aber keine Sorge, das hat eine wissenschaftliche Grundlage und ist durchaus in (viel) weniger als einer Stunde zu bewältigen. Bei einem "echten" Fragebogen würde ich Ihnen natürlich völlig zustimmen, dass diese Anzahl zu viel wäre. Haben Sie eine Lösung für mein Zusammenstellungsproblem?

2 Answers

0 votes
by SoSci Survey (298k points)
selected by s085346
 
Best answer

Was die Masse an Fragen angeht, habe ich nach wie vor Vorbehalte, aber das soll Ihr Problem sein :)

Sie können alle Fragen einer Rubrik mit getQuestions()anrufen und dann mit dem Befehl loopPage() relativ bequem auf einzelnen Seiten anzeigen:

$questions = getQuestions('AB01');
$i = loopPage(count($questions));
question($questions[$i]);

Mit dem Befehl array_merge() können Sie auch mehrere Listen zusammenfassen, also z.B. die Frage-Listen zweier Rubriken:

$questions = array_merge(
  getQuestions('AB01'),
  getQuestions('RX01')
);
$i = loopPage(count($questions));
question($questions[$i]);

Das könnten Sie nun auf 11 Seiten machen. Aber wenn Sie wirklich alle 300 Fragen nach diesem Muster zusammen abfragen möchten, können Sie auch am Anfang "en block" die Frage-Kennungen einsammeln (die drei Punkte ... in Zeile 1 müssten Sie natürlich durch die echten Kennungen ersetzen):

$sections = array('A1', 'R1', 'A2', 'R2', ..., 'AA', 'RA');
$questions = array();
foreach ($sections as $section) {
  $questions = array_merge($questions, getQuestions($section));
}
$i = loopPage(count($questions));
question($questions[$i]);

Ich glaube, noch sparsamer als mit einer Seite geht es nicht.

by s085346 (300 points)
Vielen Dank! Die schlanke Einseiten-Lösung gefällt mir sehr!
Können Sie mir verraten, wie ich jetzt noch a) die so gemergten 11 Sections zufällig rotiere? und b) zusätzlich die einzelnen Fragen der Sections rotiere?
Dann funktioniert alles wie ich es gerne hätte :)
by SoSci Survey (298k points)
Gestalten Sie bitte als erstes das erste Array, wo die Rubriken definiert werden, als verschachteles Array, sodass die beiden zusammengehörigen Rubriken immer in einem Array sind und dieser Arrays wieder in einem. Das können Sie einfach mischen mit `shuffle()`. Und beim `foreach` haben Sie dann halt immer gleich beide Rubrik-Kennungen statt nur einer - können also `getQuestions()` auch zweimal aufrufen.

Das Ergebnis von `getQuestions()` können Sie erstmal in eine Variable packen und diese wieder mischen, bevor Sie es mittels array_merge() in das gesamt-Array schreiben. Fertig.
by s085346 (300 points)
Könnten Sie mir das bitte nochmal als code zusammenfassen? Ich komme nicht wirklich zum Ziel.
0 votes
by SoSci Survey (298k points)

Können Sie mir verraten, wie ich jetzt noch a) die so gemergten 11 Sections zufällig rotiere? und b) zusätzlich die einzelnen Fragen der Sections rotiere?
...
Könnten Sie mir das bitte nochmal als code zusammenfassen? Ich komme nicht wirklich zum Ziel.

Sie hätten zumindst posten können, wie weit Sie schon gekommen sind ;)

if (!isset($questions)) {
    $sections = array(
      array('A1', 'R1'),
      array('A2', 'R2'),
       ...,
      array('AA', 'RA')
    );
    shuffle($sections);
    $questions = array();
    foreach ($sections as $sectionPair) {
      $first = getQuestions($sectionPair[0]);
      shuffle($first);
      $second = getQuestions($sectionPair[1]);
      shuffle($second);
      $questions = array_merge($questions, $first, $second);
    }
    registerVariable($questions);
}
$i = loopPage(count($questions));
question($questions[$i]);
by s085346 (300 points)
Da haben Sie recht, ich hätte meine Code mal ruhig posten können, sorry!
Ihre Lösung wirft folgende Fehlermeldungen auf:
- Im Befehl question() wurde keine Frage-Kennung angegeben.
- Im Bezug auf shuffle($first) und shuffle($second):  shuffle() expects parameter 1 to be array, string given
- Im Bezug auf die Arrayzusammenführung:  array_merge(): Argument #2 is not an array
by SoSci Survey (298k points)
Stimmt, ich hatte noch zweimal getQuestions() vergessen - hiermit ergänzt. Das erklärt alle drei Fehlermeldungen.
by s085346 (300 points)
Jetzt stimmt es fast, nur habe ich jetzt das Problem, dass manche Fragen doppelt angezeigt und somit überschrieben werden. Ein goTopage oder question[]='Seitenname' hat das Problem leider nicht beheben können.
by SoSci Survey (298k points)
Ja, korrekt. Es fehlt noch ein isset(), damit die Rotation "stabil" bleibt. Wird auch gleich noch ergänzt :)
by s085346 (300 points)
Mist, da hätte ich jetzt auch noch drauf kommen können! Dankeschön :)

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

...