Da wir zur Zuordnung der Verweildauer die Reihenfolge der Items benötigen
Meine Empfehlung wäre, dass Sie gleich im Fragebogen rechnen. Aber damit das funktioniert (wie auch das Speichern der Reihenfolge), sollten Sie ausnahmsweise nicht das komplette Array mischen, sondern nur die "Schlüssel".
Klingt komplizierter als es ist. Also...
$blocks = array( // Liste der Frage-Kennungen und zugehöriger Bilder
array('D101', 'Inc_Other1.png'),
array('D102', 'Inc_Other2.png'),
array('D103', 'Inc_Other3.png'),
array('D104', 'Inc_Other4.png'),
array('D105', 'Inc_Other5.png'),
array('D106', 'Inc_Other6.png'),
array('D107', 'Inc_Other7.png'),
array('D108', 'Inc_Other8.png'),
array('D201', 'Inc_Self1.png'),
array('D202', 'Inc_Self2.png'),
array('D203', 'Inc_Self3.png'),
array('D204', 'Inc_Self4.png'),
array('D205', 'Inc_Self5.png'),
array('D206', 'Inc_Self6.png'),
array('D207', 'Inc_Self7.png'),
array('D208', 'Inc_Self8.png'),
array('D301', 'Inst_Other1.png'),
array('D302', 'Inst_Other2.png'),
array('D303', 'Inst_Other3.png'),
array('D304', 'Inst_Other4.png'),
array('D305', 'Inst_Other5.png'),
array('D306', 'Inst_Other6.png'),
array('D307', 'Inst_Other7.png'),
array('D308', 'Inst_Other8.png'),
array('D401', 'Inst_Self1.png'),
array('D402', 'Inst_Self2.png'),
array('D403', 'Inst_Self3.png'),
array('D404', 'Inst_Self4.png'),
array('D405', 'Inst_Self5.png'),
array('D406', 'Inst_Self6.png'),
array('D407', 'Inst_Self7.png'),
array('D408', 'Inst_Self8.png')
);
if (!isset($order)) {
$order = array_keys($blocks);
// Die Liste mischen
shuffle($order);
// Die Listen auf allen Seiten verfügbar machen
registerVariable($order);
}
// Anzeige der Blöcke
$i = loopToPage('frage', count($order));
html('<p><img src="'.$blocks[$order[$i]][1].'" alt="Dilemma"></p>');
Was hat sich geändert? Die Blöcke bleiben wie sie sind, aber es gibt ein neues Array $order
, welches einfach die Zahlen von 0 bis 32 enthält, entsprechend den 33 Einträgen im $blocks
Array. Diese Abfolge wird gemischt.
In der letzten Zeile sehen Sie dann, dass es nicht mehr $blocks[$i]
heißt, sondern $blocks[$order[$i]]
. Das vereinfacht jetzt die Speicherung der Zeiten. Und hier kann auch gleich gerechnet werden (gespeichert in IV03, die Sie noch anlegen müssen).
if (getRoute() == 'next') {
put(id('IV01', $order[$i] + 1), time());
if ($i > 0) {
$prevTime = value(id('IV01', $order[$i - 1] + 1));
put(id('IV03', $order[$i - 1] + 1), time() - $prevTime);
}
}
In IV02 bekommen Sie nun alle Zeiten - mit Ausnahme der letzten. Dafür müssen sie auf der Seite nach "frage" noch folgendes ergänzen:
if (getRoute() == 'next') {
$i = count($order);
$prevTime = value(id('IV01', $order[$i - 1] + 1));
put(id('IV03', $order[$i - 1] + 1), time() - $prevTime);
}
... habe ich über folgenden Befehl versucht die Reihenfolge im Datensatz zu speichern:
Auch das ist nun einfacher. Wenn Sie z.B. den Rang speichern möchten:
for ($i=0; $i<count($order); $i++) {
$id = id('IV02', $order[$i] + 1);
put($id, $i + 1);
}
Wenn Stimulus 3 als erstes angezeigt würde, dann würde IV02_03 den Wert 1 speichern. Diese FOR-Schleife können Sie noch in dem isset()
-FIlter direkt nach dem registerVariable()
ausführen - das muss nicht 33-mal gemacht werden.