Liebes SoSciSurvey-Team,
wir erstellen gerade ein Experiment, bei dem die TeilnehmerInnen immer zwei Satzanfänge und zwei Satzenden präsentiert bekommen und dann zuordnen sollen, welche am besten zusammenpassen. Dafür nutzen wir den Aufgabentyp „Rangordnung“. Jetzt haben wir 7 Itempaare (sicher-unsicher), von denen zufällig eins präsentiert werden soll.
Ich habe verschiedene Ansätze, stoße aber bei jedem auf ein Problem:
Ansatz 1. Ich habe im Fragenkatalog 14 Items (statt 2) jeweils mit einem Sicherheitswort erstellt.
Die Idee war es über random_items() aus den 7 unsicheren Wörtern eins zufällig zu ziehen und dann mit einem if-elseif
statement, abhängig vom gezogenen Wort, das richtige sichere Wort zu wählen. Ich habe 14 Interne Variablen abgespeichert, sehe also im Nachhinein welche Items gewählt wurden
Ich habe den Code einer Vorgängerversion stehen lassen, gehe aber davon aus, dass man das irgendwie integrieren muss)
// Code der Vorgängerversion
if (!isset($items_L111)) {
$items_L111 = getItems('L111', 'all');
shuffle($items_L111);
registerVariable($items_L111);
}
// mein Code
$items_1 = random_items('1,3,5,7,9,11,13', 1); // zufällig ein Item ziehen
// Paar vervollständigen
if ($items_1 == '1') {
$items_2 = '2 ';
} elseif ($items_1 == '3' ) {
$items_2 = '4 ';
} elseif ($items_1 == '5 ') {
$items_2 = '6 ';
} elseif ($items_1 == '7 ') {
$items_2 = '8 ';
} elseif ($items_1 == '9') {
$items_2 = '10 ';
} elseif ($items_1 == '11') {
$items_2 = '12 ';
} else {
$items_2 = '14 ';
};
question('L111', $items_1)
Die Probleme:
- wenn ich das so mache, wird nur ein Satz + 1 Item gezeigt, da ich $items_2 nicht an den question() Befehl übergebe
- wenn ich allerdings question('L111', [$items_1, $items_2]); versuche, geht es nicht weil kein Array verwendet werden darf. Tatsächlich bekomme ich dieses Problem nicht, wenn ich
if ($items_1 = '1') {
$items_2 = '2 ';
} (also nur ein = Zeichen) verwende, dann bekomme ich die richtigen Paare angezeigt aber das if-statement funktioniert nicht, ich bekomme immer das gleiche Paar.
Ansatz 2:
Hier habe ich nur 2 Items im Fragenkatalog und formuliere diese als Platzhalter: %sicher%; %unsicher%
Im PHP Code, erstelle ich eine Liste der unsicheren Wörter, ziehe davon zufällig eines und ersetze den Platzhalter dadurch. Im Endeffekt soll dann auch wieder ein if-elseif statement für die sicheren Wörter verwendet werden, da ich aber jetzt schon Probleme haben lasse ich erstmal eine Version. Das ganze funktioniert im Fragebogen wunderbar, ich sehe so aber im Datensatz nicht, welches Item gezogen wurde, das bringt ja nichts. Das Ganze soll auch über put abgespeichert werden, der Befehl nimmt allerdings keine arrays...
// Code der Vorgängerversion
if (!isset($items_L102)) {
$items_L102 = getItems('L102', 'all');
shuffle($items_L102);
registerVariable($items_L102);
}
// Liste der unsicheren Wörter
$array = array('möglicherweise', 'unter Umständen', 'womöglich', 'gegebenenfalls', 'vermutlich', 'vielleicht','eventuell');
// zufällig eines davon ziehen
$a = array_rand($array);
// das Gezogene einsetzen
replace('%unsicher%', $array[$a]);
//vorläufige Version sicherer Wörter
replace('%sicher%', 'auf jeden Fall');
question('L102', $items_L102);
for ($i=0; $i<count($items_L102); $i++) {
// Kennung der internen Variable aus Frage-Kennung plus Inhalt des Elements (!) erstellen
$id = id('IV02', $items_L102[$i]);
// Hier den Rang speichern
put($id, $i + 1);
}
Wie kann ich die Auswahl mithilfe put abspeichern?
Ansatz 3: Das Ganze über Urnenziehung durchführen, allerdings ist die Idee neu und ich habe noch nicht ganz verstanden wie es funktioniert.
Ich arbeite das erste Mal mit PHP und kann strukturelle Probleme gerade schwierig einschätzen und verbessern.
Ich hoffe, es sind alle Infos vorhanden und es ist verständlich beschrieben.
Vielen Dank für die Hilfe!