Dies ist eine alte Version des Dokuments!
Manchmal genügt es für einen Filter nicht, einzelne Antworten zu überprüfen, sondern man muss sich alle Items einer Frage ansehen. Sei es, um entsprechende Items in einer anderen Frage abzufragen (Items in eine anderen Frage übernehmen) oder einfach nur, um zu überprüfen, ob mindestens ein Item eine bestimmte Bedingung erfüllt. Ein Sonderfall ist das Berechnen von Skalenindizes innerhalb der Befragung (Punkte für Antworten zählen).
Dieses Kapitel beschreibt die Funktion getItems()
und sog. Schleifen – zwei Werkzeuge, die raffinierte Filter über mehrere Items erlauben. Ausgangspunkt dieses Kapitels ist folgende Frage TF04, eine Skala. Als zusätzliche Informationen sind in der Abbildung die Werte der Skala und die Kennungen der Items eingetragen.
Aufgabenstellung sei es nun, zu überprüfen, ob der Befragte mindestens ein Medium mindestens einmal im Monat nutzt. Das ließe sich freilich mit 6 einzelnen Bedingungen erledigen, die per and
verknüpft werden (Mehrere Bedingungen verknüpfen). Im Folgenden wird beschrieben, wie es flexibler und eleganter geht.
Mit der Funktion getItems()
kann man sich eine Liste (Array) der ausgewählten Items erstellen lassen. Mit der PHP-eigenen Funktion count()
kann man überprüfen, ob diese Liste mindestens einen Eintrag (also ein Item) enthält.
Der folgende PHP-Code geht davon aus, dass die Frage TF04 auf Seite 1 gestellt wurde.
Die Funktion getItems() listet in diesem Fall alle Items auf, die mindestens (min
) den Wert 2 haben.
// PHP-Code auf Seite 2 $gewaehlt = getItems('TF04', 'min', 2); // Genutzte Medien ermitteln if (count($gewaehlt) == 0) { goToPage('end'); // Ende, wenn keines der Medien genutzt wird }
Die weitere Anleitung beschreibt, wie man dasselbe Problem mit einer FOR-Schleife lösen kann. Dieses Vorgehen ist dann interessant, wenn die Funktion getItems()
einmal nicht ausreicht.
Eigentlich muss man nur alle Items (Nr. 1 bis 6) in derselben Art und Weise überprüfen. Für solch monotone Aufgaben gibt es sogenannte Schleifen. Eine FOR-Schleife macht nichts anderes, als eine Zahl durchzuzählen.
Das folgende Beispiel zur Demonstration von Schleifen schreibt eine Textzeile einfach 6-mal mit leicht verändertem Inhalt in den Fragebogen.
Die Zahl, die in jedem Durchgang um 1 hochgezählt wird, speichert die Schleife in der Variable $i
(PHP-Variablen). Die FOR-Zählung beginnt in diesem Beispiel mit 1 ($i=1
). Dann wird die Zahl so lange um eins erhöht ($i++
), so lange $i
kleiner oder gleich 6 ist ($i⇐6
). Es werden also alle Zahlen von 1 bis 6 durchgegangen: Das was hinter dem for
in geschweiften Klammern steht wird sechsmal ausgeführt – jeweils mit unterschiedlichem $i
.
for ($i=1; $i<=6; $i++) { html((string)$i); }
Obige Schleife schreibt die Zahl einfach in den Fragebogen – das Ergebnis ist trivial:
123456
Interessanter wird das Ganze, wenn man aus der Zahl eine Item-Kennung erzeugt. Im folgenden Beispiel wird vorab die Kennung der Frage in die Variable $question
gespeichert. In der Schleife werden dann mit dem Punkt (.
) der Text 'Runde ', die Zahl $i
und weitere Textfragmente zusammengesetzt und in der Variable $text
gespeichert. Die Variable $text
enthält dann z.B. im ersten Durchlauf „Runde 1 mit Item TF04_01“.
$question = 'TF04'; // Speichert Text 'TF04' in Variable $question for ($i=1; $i<=6; $i++) { $text = 'Runde '.$i.' mit Item '.$question.'_0'.$i; // Zusammensetzen html('<p>'.$text.'</p>'); // Anschreiben }
Der PHP-Code erzeugt im Fragebogen nun folgende Ausgabe, welche bereits Item-Kennungen enthält:
Runde 1 mit Item TF04_01 Runde 2 mit Item TF04_02 Runde 3 mit Item TF04_03 Runde 4 mit Item TF04_04 Runde 5 mit Item TF04_05 Runde 6 mit Item TF04_06
Natürlich soll nicht einfach nur die Item-Kennung angeschrieben werden. Das folgende Beispiel stellt die Frage und überprüft (auf der nächsten Seite), welche Medien mindestens einmal im Monat genutzt werden (Antwort-Code mindestens 2). Wie vorher wird die Kennung des Items dafür in eine Variable ($item
) gespeichert.
Vorab wird die Variable $zaehler
auf 0 gesetzt. Mit jedem Medium, das mindestens einmal im Monat genutzt wird, wird der Zähler um eins erhöht ($zaehler++
ist gleichbedeutend mit $zaehler = $zaehler + 1
).
Damit folgender PHP-Code funktioniert, muss einer vorhergehenden Seite die Frage TF04 gestellt worden sein.
$question = 'TF04'; // Falls man die Kennung häufiger braucht $anzahl_items = 6; // Geprüft werden 6 Items $zaehler = 0; // Setzt den Zähler auf 0 for ($i=1; $i<=$anzahl_items; $i++) { $item = $question.'_'.$i; // ergibt z.B. TF04_1 if (value($item) >= 2) { // Prüft Item TF01_1 bis TF04_6 html('<p>Medium Nr. '.$i.' wird regelmäßig genutzt</p>'); $zaehler++; // Zähler um 1 erhöhen } } // Information anzeigen html('<p>Regelmäßig genutzt werden '.$zaehler.' Medien</p>'); // Filter if ($zaehler == 0) { goToPage('end'); // Ende, wenn keines der Medien genutzt wird }
Durch die Schleife werden die Kennungen von TF04_1 bis TF04_6 erzeugt und in $item
gespeichert.
Tipp: Wenn die Item-Kennung nur einstellig angegeben wird (statt zweistellig wie in TF04_01), stört das den value()-Befehl nicht weiter. Dies ist insbesondere hilfreich, wenn man mehr als 9 Items überprüfen will.
Interessant ist in diesem Fall vor allem, was man mit dem Zähler ($zaehler
) anfangen kann – also die letzten drei Zeilen. Wenn ein Befragter keines der angegeben Medien mindestens einmal im Monat nutzt, so wird er im obigen Beispiel direkt ans Ende des Fragebogens befördert. Natürlich könnte man so auch eine Fragenblock überspringen oder andere Filter in Abhängigkeit von $zaehler
realisieren.
Tipp: Falls Sie die aufwändig ermittelte Variable $zaehler
später noch einmal für einen anderen Filter benötigen, verwenden Sie die Funktion registerVariable()
.
Oft kommt es auch vor, dass in einer weiteren Frage nur Items zu den Medien angefragt werden sollen, die auch genutzt werden. Wie das funktioniert erklärt das Kapitel Items in eine anderen Frage übernehmen.