Guten Tag,
in meinem Skript werden die 6 Antwortoptionen einer Frage mittels php-code randomisiert und die Positionen der Optionen abgespeichert. Die Ausweichoption ist davon ausgenommen und bleibt immer rechts am rand stehen.
Ich würde gerne aber noch zusätzlich die Reihenfolge der Antwortoptionen abspeichern, weil mir dies die zukünftige Auswertung sehr erleichtern würde.
Als Bsp.:
Es gibt die Antwortoptionen 1, 2, 3, 4, 5, 6
Diese werden Gemisch, z.B. so: 2, 5, 1, 3, 4, 6
Nun wird im Augenblick folgendes gespeichert:
3, 1, 4, 5, 2, 6 (weil Auswahloption 1 auf Position 3, Option 2 auf Position 1, etc. sind)
Es soll aber in eine interne Variable mit sechs Unterkategorien auch die Reihenfolge 2, 5, 1, 3, 4, 6 gespeichert werden.
Das bisherige Skript sieht so aus:
//Hier wird die Reihenfolge der Bilder randomisiert und in IV14 gespeichert
if (!isset($items12)) {
$items12 = getItems('LG09', 'all');
$items12 = array_diff($items12 , [-1]);
shuffle($items12);
registerVariable($items12);
}
for ($i=0; $i<count($items12); $i++) {
// Kennung der internen Variable aus Frage-Kennung plus Inhalt des Elements (!) erstellen
$id = id('IV14', $items12[$i]);
// Hier den Rang speichern
put($id, $i + 1);
}
question('LG09', $items12);
}
Das gleiche gilt auch für eine zweite Stelle meines Skripts. hier werden nicht Antwortoptionen, sondern (vier Mal) Seitenkennungen in einem array randomisiert. Auch hier wird die Position in eine interne Variable geschrieben und ich hätte zusätzlich gerne die Reihenfolge. Das Skript hierzu ist:
$Seq_GU = array (
'Seq_GU11' => array('s1GU1', 's2GU1', 's3GU1',
's4GU1', 's5GU1', 's7GU1'),
'Seq_GU21' => array('s1GU2', 's2GU2', 's3GU2',
's4GU2', 's5GU2', 's7GU2'),
'Seq_GU31' => array('s1GU3', 's2GU3', 's3GU3',
's4GU3', 's5GU3', 's6GU3'),
'Seq_GU41' => array('s1GU4', 's2GU4', 's3GU4',
's4GU4', 's5GU4', 's6GU4')
//GU1 = blau, GU2 = orange, GU3 = grün, GU4 = violett (Dummy-Bilder)
//s1 - s5 stehen für die Distraktoren, s6 für Target 1 und s7 für Target 2
);
// Den ersten Block aus dem Array $Seq_GU herausnehmen, etc.
$Seq_GU1 = array_shift($Seq_GU);
$Seq_GU2 = array_shift($Seq_GU);
$Seq_GU3 = array_shift($Seq_GU);
$Seq_GU4 = array_shift($Seq_GU);
//Speichern der Reihenfolge von Targets und Distraktoren in einer internen Variable
$indices1 = array_keys($Seq_GU1);
shuffle($indices1);
registerVariable('indices1');
// Nun die Ränge speichern - und die neue Abfolge der Seiten in $Seq_GU_order speichern
$Seq_GU_order1 = array();
for ($i=0; $i<count($indices1); $i++) {
// Rang speichern wie oben
$id = id('IV01', $indices1[$i] + 1);
put($id, $i + 1);
// Seite in der Abfolge speichern
$Seq_GU_order1[$i] = $Seq_GU1[$indices1[$i]];
}
$indices2 = array_keys($Seq_GU2);
shuffle($indices2);
registerVariable('indices2');
// Nun die Ränge speichern - und die neue Abfolge der Seiten in $Seq_GU_order speichern
$Seq_GU_order2 = array();
for ($i=0; $i<count($indices2); $i++) {
// Rang speichern wie oben
$id = id('IV03', $indices2[$i] + 1);
put($id, $i + 1);
// Seite in der Abfolge speichern
$Seq_GU_order2[$i] = $Seq_GU2[$indices2[$i]];
}
$indices3 = array_keys($Seq_GU3);
shuffle($indices3);
registerVariable('indices3');
// Nun die Ränge speichern - und die neue Abfolge der Seiten in $Seq_GU_order speichern
$Seq_GU_order3 = array();
for ($i=0; $i<count($indices3); $i++) {
// Rang speichern wie oben
$id = id('IV04', $indices3[$i] + 1);
put($id, $i + 1);
// Seite in der Abfolge speichern
$Seq_GU_order3[$i] = $Seq_GU3[$indices3[$i]];
}
$indices4 = array_keys($Seq_GU4);
shuffle($indices4);
registerVariable('indices4');
// Nun die Ränge speichern - und die neue Abfolge der Seiten in $Seq_GU_order speichern
$Seq_GU_order4 = array();
for ($i=0; $i<count($indices4); $i++) {
// Rang speichern wie oben
$id = id('IV05', $indices4[$i] + 1);
put($id, $i + 1);
// Seite in der Abfolge speichern
$Seq_GU_order4[$i] = $Seq_GU4[$indices4[$i]];
}
$Seq_GUNeu = [
1 => $Seq_GU_order1,
2 => $Seq_GU_order2,
3 => $Seq_GU_order3,
4 => $Seq_GU_order4
];
registerVariable('Seq_GUNeu');
$Seq_GU_order = array (
$Seq_GU_order1,
$Seq_GU_order2,
$Seq_GU_order3,
$Seq_GU_order4
);
// Die Schlüssel mischen, nicht das Array selbst
$indicesA = array_keys($Seq_GU_order);
shuffle($indicesA);
// Jetzt wieder Reihenfolge (der Gegenüberstellungen)
//speichern und ein gemischtes Array erzeugen
$Seq_GUMix = [];
for ($i=0; $i<count($indicesA); $i++) {
// Rang speichern
$id = id('IV13', $indicesA[$i] + 1);
registerVariable('Seq_GUMix');
debug($i);
debug($indicesA);
debug($id);
debug($indicesA[$i]);
put($id, $i + 1);
// Teil-Array speichern
$Seq_GUMix[$i] = $Seq_GU_order[$indicesA[$i]];
}
setPageOrder($Seq_GUMix[0], 'S2', $Seq_GUMix[1], 'S3', $Seq_GUMix[2], 'S4', $Seq_GUMix[3], 'GK' );
}
Etwas lang, aber so lassen sich vermutlich besser die Variablennamen etc. nachvollziehen. Bsp. für eine relevanten Stelle wäre:
//Speichern der Reihenfolge von Targets und Distraktoren in einer internen Variable
$indices1 = array_keys($Seq_GU1);
shuffle($indices1);
registerVariable('indices1');
// Nun die Ränge speichern - und die neue Abfolge der Seiten in $Seq_GU_order speichern
$Seq_GU_order1 = array();
for ($i=0; $i<count($indices1); $i++) {
// Rang speichern wie oben
$id = id('IV01', $indices1[$i] + 1);
put($id, $i + 1);
// Seite in der Abfolge speichern
$Seq_GU_order1[$i] = $Seq_GU1[$indices1[$i]];
}
Anhand dessen kann ich das Skript auch für die anderen Teile anpassen, denke ich.
Wie muss beides jeweils geändert werden?
Vielen Dank im Voraus und liebe Grüße!