0 votes
in SoSci Survey (dt.) by s111048 (170 points)

Lieber Online-Support,

ich habe hier bereits einmal eine Frage zu meinem Problem gestellt und dazu schon eine ausführliche Antwort bekommen. Trotzdem komme ich nicht weiter. Ich verstehe im Manual, wie die Funktionen bei einzelnen Beispielen verwendet werden, aber mir ist nicht klar, wie ich sie für meinen Fall verknüpfen kann.

Die Teilnehmenden rekonstruieren den Morgen ihres gestrigen Tags in maximal 10 Episoden. Eine Episode ist eine Frage mit 4 Items (jeweils offene Textangaben zu Name, Beginn, Ende und Notizen zur Episode). Die Kennung von Episode 1 ist LM02, die Fragenkennungen LM02_01, LM02_02, LM02_03, LM02_04. Entsprechend sind die Kennungen bis Episode 10 (LM11 mit LM11_01 etc.). Die Teilnehmenden müssen die erste Episode ausfüllen, danach ist die Anzahl, die sie angeben, frei. Eine Episode gilt als ausgefüllt, wenn eins ihrer Items beantwortet wurde (nicht nur Leerzeichen).
Zu allen berichteten Episoden sollen die Teilnehmenden nun einen Frageblock mit immer denselben Fragen beantworten (10 Rubriken mit denselben Fragen: Rubrik M1, M2, …). Hierzu möchte ich die Funktion loopToPage() verwenden (keine Multilevel-Struktur aufgrund der späteren Auswertung). Auf Seite 1 (RMa) soll die jeweils ausgefüllte Episode zusammen mit der Beschriftung der Items/Frage stehen. Auf Seite 2-4 (RMb-RMd) werden die 12 Fragen verteilt angezeigt.

Mein Problem ist nun,

  1. dass ich es nicht schaffe den PHP Code zusammenzustellen, um zu ermitteln, wie viele Episoden angegeben wurden. Diese Zahl benötige ich für LoopToPage(). Ich weiß, dass ich pro Frage ermitteln kann, ob mindestens ein Item ausgefüllt wurde, aber ich schaffe es nicht in PHP die Information aus den einzelnen Fragen zu einer Variable, die die Anzahl ausdrückt, zusammenzuführen. Eine Episode ist beantwortet, wenn mindestens ein Item ausgefüllt wurde. Mit trim() kann ich überprüfen, ob nur Leerzeichen eingegeben sind. Aber ich komme auch nicht darauf, wie ich das alles zusammen in PHP ausdrücke. Ich denke, ich müsste mit Arrays arbeiten und array_merge. Aber die praktische Umsetzung schaffe ich nicht.

  2. dass ich nicht weiß, wie ich sicherstellen kann, dass dann auf Seite 1 (RMa) tatsächlich nur die beantworteten Episoden angezeigt werden. Es ist möglich, dass LM02 – LM04 ausgefüllt, LM05 und LM06 ausgelassen wurden, und LM07 wieder ausgefüllt wurde. Die Episoden sollen nicht wie die Frageblöcke der Reihe nach entsprechend der jeweils zutreffenden Wiederholung angezeigt werden, sondern unausgefüllte Episoden sollen übersprungen werden. Das heißt, um auf dieses Beispiel zurückzukommen, es sollen nicht LM02-LM05 angezeigt werden (d.h. die ersten 4 Episoden), sondern LM02-LM04 und dann LM07.

Ich würde mich wirklich sehr über Hilfe freuen, vor allem in Form von, wie man das praktisch in PHP ausdrücken könnte. Vielen, vielen Dank schon einmal!

Bisher habe ich:

Erklärung: Momentan frage ich mit einer Auswahlfrage (ME01) ab, wie viele Episoden die Teilnehmenden angegeben haben.

Seite 1 (RMa):

$anzahl = (int)value('ME01');
LoopToPage (‘RMd‘, $anzahl)
$i = loopIndex()


Seite 2 (RMb)

$rubriken = array (‘M1‘‚ ‘M2‘,‘M3‘,‘M4‘,‘M5‘,‘M6‘,‘M7‘,‘M8‘,‘M9‘,‘MT‘);
registerVariable ($rubriken);
$i = loopIndex();
$rubrik = $rubriken [$i];

question (id ($rubrik, 1)); 
question (id ($rubrik, 2)); 
question (id ($rubrik, 3)); 
question (id ($rubrik, 4)); 
question (id ($rubrik, 5)); 

Seite 3 (RMc):

$i = loopIndex();
$rubrik = $rubriken [$i];

question (id ($rubrik, 6)); 
question (id ($rubrik, 7)); 
question (id ($rubrik, 8)); 
question (id ($rubrik, 9)); 
question (id ($rubrik, 10)); 
question (id ($rubrik, 11)); 

Seite 4 (RMc):

$rubrik = $rubriken[loopIndex()];

question (id ($rubrik, 12)); 

1 Answer

0 votes
by SoSci Survey (327k points)

Vorab eine kleine Nachfrage: Werden die (max.) 10 Episoden auf einer Seite abgefragt oder über mehrere Seiten verteilt?

zu ermitteln, wie viele Episoden angegeben wurden

Hierfür verwenden Sie eine FOR-Schleife, welche die Rubriken LM02 bis LM11 abarbeitet und zählt, wo ausgefüllt wurde. Und für jede Rubrik/Episode wird geprüft, ob etwas eingetragen ist.

$sections = [
  1 => 'LM02',  2 => 'LM03', 3 => 'LM04', 4 => 'LM05', 5 => 'LM06',
  6 => 'LM07',  7 => 'LM08', 8 => 'LM09', 9 => 'LM10', 10 => 'LM11'
];
$episoden = array();

foreach ($sections as $ep => $sec) {
  if (
    (trim(value(id($sec, 1))) == '') and
    (trim(value(id($sec, 2))) == '') and
    (trim(value(id($sec, 3))) == '') and
    (trim(value(id($sec, 4))) == '')
  ) {
    // Hier wurde nichts eingetragen, weiter zur nächsten
    continue;
  }
  // Sonst die Nummer der Episode notieren
  $episoden[] = $ep;
}
// Die Liste benötigen wir evtl. noch auf weiteren Seiten
registerVariable($episoden);

dass dann auf Seite 1 (RMa) tatsächlich nur die beantworteten Episoden angezeigt werden.

Darauf wollte ich eben hinweisen :) Auch das lässt sich nun mit loopToPage() recht einfach abbilden:

$i = loopToPage(count($episoden));
$ep = $episoden[$i];

Damit wissen Sie nun, zu welcher Episode $ep Sie die Fragen stellen möchten. Mit einem Array können Sie das ganz einfach wieder in die Rubrik-Kennungen umwandeln.

by s111048 (170 points)
Vielen Dank für Ihre schnelle Antwort! Das hilft mir wirklich ungemein weiter. Zu Ihrer Frage: Ja, die Episoden werden auf einer Seite abgefragt.

Nur noch eine kurze Frage, was meinen Sie mit dem Umwandeln der Episoden in die Frage-Kennungen per Arrays? Ich wäre jetzt so vorgegangen:

$titel = value(id($episoden[$i]));
$titel = replace('%eTitel%', id($episoden[$i]), 'response');

Oder ist das nicht möglich?
by SoSci Survey (327k points)
> Nur noch eine kurze Frage, was meinen Sie mit dem Umwandeln der Episoden in die Frage-Kennungen per Arrays? Ich wäre jetzt so vorgegangen:

Ich meinte, dass Sie ja in jedem Loop-Durchgang Frage aus unterschiedlichen Rubriken zeigen. Und für die Rubriken-Kennungen würden Sie wieder sowas verwenden wie bei der Variable $sections im obigen Code.

id($episoden[$i]) wird nicht funktionieren, weil $episoden[$i] nur eine Zahl ist. Aber so etwas wie $rubrik = $rubriken[$episoden[$i]] könnte die Rubrik-Kennung liefern, die man dann in id() verwenden kann.

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

...