Sie speichern ja aktuell die Reihenfolge schon in internen Variablen:
for ($i=0; $i<9; $i++) {
// Kennung der internen Variable aus Frage-Kennung plus Index erstellen
$id = id('R003', $i + 1);
// Hier den Wert aus dem Array speichern
put($id, $aussage[$i]);
}
Das können Sie auch später nutzen, um die Aussagen zuordnen zu lassen. Nehmen wir einmal an, Sie haben eine Frage ZU01 mit 9 Optionen angelegt und es geht um die Aussage, die an erster Stelle angezeigt wurde. Also R003_01
.
Bereiten wir erst einmal ein paar Platzhalter %option1%
bis %option9%
vor. Als Itemtext in ZU01 verwenden Sie diese als Itemtexte.
$texte = ['FE01', 'FE02', 'FE03', 'FE04', 'FE05', 'FE06', 'FE07', 'FE08', 'FE09'];
for ($i=0; $i<9; $i++) {
replace('%option'.($i+1).'%', getTextelement($texte[$i]));
}
Wenn wir darunter jetzt die Frage ZU01 anzeigen, dann würden wir die 9 Aussagen als Optionen sehen.
Jetzt möchten wir aber nur die richtige Aussage plus 2 andere anzeigen.
$correct = value('R003_01');
$others = array_diff($texte, [$correct]);
shuffle($others);
debug($others);
Damit sollten wir nun eine gemischte Liste der Texte haben, die falsch sind. Die ersten beide nehmen wir als Ablenkung.
$use = [$correct, $others[0], $others[1]];
debug($use);
Davon benötigen wir aber nur die Nummern, ist klar...
$items = [];
foreach ($use as $id) {
$items[] = (int)trim(substr($id, 2), '0');
}
debug($items);
shuffle($items);
question('ZU01', $items);
Sollte das nicht auf Anhieb funktionieren, posten Sie bitte, was der Fragebogen im Debug-Modus so anzeigt. Dafür sind die vielen debug()
da.