0 votes
in SoSci Survey (dt.) by s154695 (435 points)

Guten Tag,

ich möchte in meinem Fragebogen einen Anagramm-Test einfügen.
Die Teilnehmer sollen dabei eine Reihe von Buchstabenfolgen präsentiert bekommen, aus denen sie reale Wörter bilden sollen.
Ich möchte ihre richtigen Antworten bepunkten und diesen Wert später rückmelden bzw. weiterverwenden.

Nun gibt es für die Buchstabenfolgen manchmal mehrere richtige Lösungen. Über das Fragenformat "Offene Nennung" konnte ich bereits mehrere Eingabefelder untereinander einfügen, in welche die richtigen Wörter eingegeben werden können.
Allerdings bin ich unschlüssig, wie ich die richtigen Antworten definieren, pro richtiger Antwort z.B. einen Punkt vergeben kann und die Punkte am Ende des Tests aufsummiere und als Variable speichern kann, um sie im weiteren Verlauf noch verwenden zu können.
Können Sie mir da weiterhelfen?

Ich danke schon im Voraus für die Hilfe!

1 Answer

+1 vote
by SoSci Survey (302k points)

Also wenn es nur eine richtige Lösung gäbe, wäre das kein Problem. Dann können Sie ganz traditionell mit einem IF-Filter prüfen, ob die Antwort stimmt und ggf. einen Punkt zählen.

Aber wenn mehrere Antworten korrekt sind, dann brauchen wir ein wenig Mengenlehre. Kurzum: Es gibt eine Menge gegebener Antworten für ein Anagramm und eine Menge korrekter Antworten. Und die Schnittmenge daraus sind die korrekten Lösungen des Teilnehmers.

In Programmcode könnte das so aussehen:

$answers = valueList('TX01');
$correct = ['Ampel', 'Lampe', 'Palme'];
$match = array_intersect($answers, $correct);
$points = count($match);

Soweit, so gut. Jetzt noch 2 Herausforderungen: Was passiert, wenn der Teilnehmer dieselbe Lösung mehrfach einträgt? Und wie ist das mit der Groß- und Kleinschreibung. Genau, damit wird es ein wenig anspruchsvoller:

$answers = valueList('TX01');
// Erstmal alles in Kleinbuchstaben
$answers = array_map('strtolower', $answers);
// Dann doppelte entfernen
$answers = array_unique($answers);
// Und dann weiter wie gehabt (nur in Kleinschreibung)
$correct = ['ampel', 'lampe', 'palme'];
$match = array_intersect($answers, $correct);
$points = count($match);

Programmieren ist etwas Schönes, oder? :)

by s154695 (435 points)
Vielen Dank auf jeden Fall für Ihre Antwort! Programmieren ist auf jeden Fall etwas Schönes, wenn man sich damit auskennt :D

Wenn ich den Code in meinen Fragebogen einfüge, kommt allerdings die folgende Meldung:


Warnung: Die Funktion array_map() ist nicht zur Verwendung im Fragebogen freigegeben.

Warnung: Der PHP-Code enthält Funktionen oder PHP-Elemente, die nicht für die Verwendung im Fragebogen freigegeben wurden. Falls Sie der Meinung sind, dass die monierten Konstrukte ungefährlich sind, setzen Sie sich bitte mit dem Administrator in Kontakt!


Ist das entsprechend eine "verbotene" PHP-Funktion für den Server? Gibt es da eine Alternative?
by SoSci Survey (302k points)
Oh ja, dann machen wir es mit einer kleinen Schleife. Bitte ersetzen Sie ...

$answers = array_map('strtolower', $answers);

wie folgt:

foreach ($answers as $i => $answer) {
  $answers[$i] = strtolower($answer);
}

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

...