0 votes
in SoSci Survey (dt.) by s118913 (240 points)
edited by s118913

Hallo,

ich möchte die Antworten, die der Befragte in der Frage zuvor ausgewählt hat, in der nächsten Frage anzeigen.
Die Frage zuvor hat den Fragentyp "Rangordnung" und es gibt 12 Kärtchen, die man auf 5 Ränge verschieben kann. Dabei ist die Besetzung von Rang1 Pflicht.


Die Variablenübersicht von der Frage zuvor:

Nun soll in der nächsten Frage, die ersten 3 Antworten, die der Befragte zuvor angegeben hat, angezeigt werden. Dabei soll neben der Antwort ein leeres Textfeld stehen.
So sollte es aussehen (falls der Befragte in der Frage zuvor die ersten 3 Ränge besetzt hat)

Die Variablenübersicht dieser Frage ist eigentlich dieselbe wie die der Frage zuvor:
Zudem hat die Frage den Fragentyp: "Texteingabe offen"

Es musst beachtet werden, dass der Befragte Rang 2 und 3 auch nicht besetzen kann, sodass nur eine Antwortmöglichkeit angezeigt wird.

Folgender PHP-Code wurde nun ausprobiert, um die ersten 3 Antworten anzuzeigen:

$ranks = valueList('F401');  // Liefert eine Liste von Variablen und Rängen
asort($ranks);  // Aufsteigend nach Rängen sortieren
$keys = array_keys($ranks);  // Die Variablennamen extrahieren
// Und jetzt noch die Top3 als Platzhalter ablegen
$itemsIDs = array();
for ($i=0; $i<3; $i++) {
  $itemIDs[] = (int)trim(substr($keys[$i], 5), '0');
}
question('F402', $itemIDs);

Link für Pretest: https://www.soscisurvey.de/test168991/?act=jgFshe1QvX5ItAuhFOOcRLwv

Link für Debug-Vorschau: https://www.soscisurvey.de/test168991/?act=v8wxPz6KhNIBzYiNa1Wn7D1J

Beide Links fangen ab der 'zuvor gestellten' Frage (F401) an.

Können Sie mir bitte helfen in der Frage zu implementieren, dass die ersten drei Antworten der Rangordnungsfrage angezeigt werden?

Vielen Dank im Voraus!


Update [02.09.2019; 15:06 Uhr]: Fehlermeldung nach neuem Code:

1 Answer

0 votes
by SoSci Survey (327k points)

Mit Ihrem PHP-Code bekommen Sie eine Liste der Top-Antworten bzw. (und das ist wichtig) von deren Item-Nummern. Wenn also Personalabteilung, Controlling und IT auf den ersten drei Plätzen stehen, hätten Sie am Ende die Liste 2,4,8 in $itemIDs.

Jetzt müssen Sie sich entscheiden, was Sie am Ende im Datensatz haben möchten:

Option 1: Drei Antworten in drei Spalten

Sie können aus den drei Nummern mittels getItemtext() recht einfach die Original-Texte aus der Frage holen - für die Nummern 11 und 12 (offene Antworten) müssen Sie noch einen kleinen Filter einbauen, aber nichts dramatisches.

Der Nachteil dabei: Bei der Auswertung steht die Spalte 1 mal für IT, mal für Qualitätssicherung, mal für etwas ganz anderes. Deshalb würde ich davon abraten.

Option 2: Zwölf Spalten/Variablen, von denen nur 3 angezeigt werden

Dafür müssten Sie Ihre Rangordnung kopieren und dann den Fragetyp ändern - oder Sie tragen bei der Folgefrage einfach dieselben 12 Items ein wie Optionen bei der Rangordnung. In diesem Fall funktioniert Ihr Code von oben mit question('F402', $itemIDs); -- und wenn das läuft, können wir uns noch gerne die offenen Eingabefelder vornehmen.

by s118913 (240 points)
edited by s118913
Zu Option 2:
Die Items der Rangordnungsfrage F401 wurden in F402 übertragen.

Dennoch funktioniert es nicht. In F402 werden nicht die in Rängen 1-3 zuvor zugeordneten Items aus F401 angezeigt.
Im Gegenteil: Ich bekomme in F402 die Items angezeigt, die keinem Rang zugeordnet waren. Zum Beispiel habe ich in F401 Personalabteilung den ersten Rang zugeordnet und klicke auf weiter. Dann bekomme ich in F402 folgende Items angezeigt: Geschäftsführung, Buchführung/Rechnungswesen, Controlling.

Ich vermute es liegt daran, dass die Items, die in F401 keinen Rang zugeordnet bekommen haben, den Wert -9 (siehe oben zweites Bild) bekommen. Und im PHP-Code werden die Werte ersteinmal nach Größe geordnet. Kann es deshalb sein, dass mir nicht die ersten drei zugeordneten Items angezeigt bekomme?
by SoSci Survey (327k points)
Ja, das kann durchaus sein. Lösung direkt zu Beginn des Codes:

$ranks2 = valueList('F401');
$ranks = array();
foreach ($ranks as $itemID => $rank) {
  if ($rank > 0) {
    $ranks[$itemID] = $rank;
  }
}
asort($ranks);
// u.s.w.

Oder ebenfalls möglich:

$valids = getItems('F401', 'valid');
$ranks = valueList('F401', $valids);
asort($ranks);
// u.s.w.
by s118913 (240 points)
Vielen Dank für die schnelle Antwort:
Mein Code sieht nun folgendermaßen aus:
$valids = getItems('F401', 'valid');
$ranks = valueList('F401', $valids);
asort($ranks);  // Aufsteigend nach Rängen sortieren
$keys = array_keys($ranks);  // Die Variablennamen extrahieren
// Und jetzt noch die Top3 als Platzhalter ablegen
$itemsIDs = array();
for ($i=0; $i<3; $i++) {
  $itemIDs[] = (int)trim(substr($keys[$i], 5), '0');
}
question('F402', $itemIDs);


Im Funktionstest habe ich es nun einmal getestet und folgendes habe ich dabei festgestellt:

Wenn der Befragte die Ränge 1-3 in der Rangordnungsfrage F401 zuvor belegt hat, dann funktioniert es wunderbar!
Aber:
Wenn der Befragte nur die Ränge 1 und 2 [oder nur Rang 1] besetzt hat, dann bekomme ich folgende Fehlermeldung:

"Warnung (Seite 7)
Für die Frage F402 wurde kein Item mit der Kennung 0 gefunden"
(Siehe auch Screenshot - oben in der ursprünglichen Fragestellung beigefügt)


Wie kann ich diese Fehlermeldung lösen?
by SoSci Survey (327k points)
Das liegt daran, dass Sie folgende Zeile im Code haben:

for ($i=0; $i<3; $i++) {

Versuchen Sie es bitte wie folgt:

// etc.
$keys = array_keys($ranks);  // Die Variablennamen extrahieren
$keys = array_slice($keys, 0, 3);
$itemsIDs = array();
foreach ($keys as $key) [
  $itemIDs[] = (int)trim(substr($key, 5), '0');
}
question('F402', $itemIDs);

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

...