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

Hi,

ich kämpfe jetzt schon länger mit dem Problem und komme einfach nicht weiter...

Ich habe auf Seite 2 meiner Umfrage eine Frage, in der die Teilnehmer 8 aus 43 Länder auswählen sollen. Diese 8 Länder sollen dann jeweils genau einmal mit einander kombinert werden. Diese Kombinationen sollen dann als Items in der nächsten Frage (auf Seite 3) mittels einer Likert-Skala bewertet werden.

Die Kombinationen sollen so aussehen: Deutschland - Italien

Ich habe schon wirklich einiges ausprobiert und der "beste" workaround sieht bislang so aus:
--> Code auf Seite :

$items = getItems('LA01', '==', 2);


$selectedArray = $items; 
$combinations = [];
$question = 'LA01_';
for ($i = 0; $i < count($selectedArray); $i++) {
    for ($j = $i + 1; $j < count($selectedArray); $j++) {

    $question_id = $selectedArray[$i];
    $name = $question . $question_id;

    $question_id_compare = $selectedArray[$j];
    $name_compare = $question . $question_id_compare;
 
  
               $combinations[] = [  getItemtext($name),getItemtext($name_compare)];

    }
}

html('<ul>');
for($i = 0; $i < count($combinations); ++$i) {
    html('<li>' . $combinations[$i][0] . ' - ' . $combinations[$i][1] . question('MS01_' . $i) . '</li>') ;
}
html('</ul>');

Sow werden mir zwar die Kombinationen auf der Likert-Skala angezeigt, aber auch ein Fehler, der Fragetext wird vor jedem Item wiederholt angezeigt und es besteht Datenverlust.

Wie kann ich das Problem lösen? Ich benötige bitte Hilfe!!!

1 Answer

0 votes
ago by SoSci Survey (321k points)

Fangen wir mit dem Fehler an. Sie kombinieren html() mit question() - und das funktioniert so nicht, weil question() heinen HTMl-Code zurückliefert, sondern diesen direkt ins Dokument schreibt. Sie müssten also

html('<li>' . $combinations[$i][0] . ' - ' . $combinations[$i][1] . question('MS01_' . $i) . '</li>') ;

aufteilen wie folgt:

html('<div>' . $combinations[$i][0] . ' - ' . $combinations[$i][1] . '</div>');
question(id('MS01', $i));

Ich habe hier das 'MS01_' . $i auch gleich gegen id('MS01', $i) getauscht, denn MS01_1 ist nicht dassebe wie das korrekte MS01_01.

der Fragetext wird vor jedem Item wiederholt angezeigt

Sie könnten den Fragetext ab der zweiten Wiederholung ausblenden oder ganz entfernen. Aber wenn Sie ohnehin alle Items der Frage untereinander angezeigen wollen, dann gehen Sie besser einen anderen Weg.

Und zwar verwenden Sie Platzhalter, um die Kombinationen ganz regulär als Itemtexte anzuzeigen. Ändern Sie die Frage MS01 erstmal so, dass Sie den 56 Items die folgenden Texte geben:

%combination1%
%combination2%
...
%combination56%

Und dann erstellen Sie ein Array, in welchem diese 56 Kombinationen als Text stehen.

$labels = [];
foreach ($combinations as $i => $combination) {
  $labels['%combination'.$i.'%'] = $combination[0] . ' - ' . $combination[1]
}

Jetzt nur noch die Frage mit diesen Platzhaltern anzeigen:

show('MS01', $labels);

Machen Sie sich aber bitte noch rechtzeitig Gedanken, wie Sie die Daten auswerten wollen. Denn so eine "flache" Datenstruktur ist nicht ganz trivial in der Auswertung. Vielleicht möchten Sie noch x-mal 56 intene Variablen anlegen, damit Sie die in der Auswertung gleich nutzen können.

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

...