Ich mache eine Studie, in der ich die Positionen, die die Teilnehmer im Item "Graphische Positionierung" eingeben, in die interne Datenbank lade, um sie später anderen Teilnehmern zu zeigen. Daraus bilde ich Ketten, bei denen sich die Teilnehmer gegenseitig verbessern können.
In der internen Datenbank habe ich das aktuell so umgesetzt, dass nach einem "Starter-Teilnehmer", dessen Eingaben in der internen Datenbank gespeichert werden, folgende Teilnehmer diese Eingaben angezeigt bekommen und korrigieren können. Die Korrekturen überschreiben in der internen dann die ursprünglichen Eingaben.
Nun wollen wir testen, ob es einen Unterschied macht, wenn wir die ganze Historie anzeigen. Dazu binde ich die Historie je Item als String zusammen, sodass Koordinate1;Koordinate2 etc. zusammenhängen. Da die Teilnehmer selbst entscheiden, ob sie verbessern, habe ich natürlich immer unterschiedliche Längen an Koordinatenketten.
Für jedes einzelne Item soll das dann so funktionieren: Die Daten aus der internen Datenbank werden geladen. Für jedes Item wird der entsprechende Array-Eintrag gewählt (alle Daten eines Schlüssels werden anfangs als Variable $answer gespeichert) und mit explode() in die Einträge ($entries) und jeweiligen Koordinaten folgendermaßen geteilt, z.B.:
$entries = explode(";", $answer[4]);
if(count($entries) >= 1){
$current = end($entries);
replace('%current_x%', explode(",", $current)[0]);
replace('%current_y%', explode(",", $current)[1]);
}
if(count($entries) >= 2){
$first = $entries[0];
replace('%first_x%', explode(",", $first)[0]);
replace('%first_y%', explode(",", $first)[1]);
}
if(count($entries) >= 3){
$second = $entries[1];
replace('%second_x%', explode(",", $second)[0]);
replace('%second_y%', explode(",", $second)[1]);
}
Dass ich end() benutze, liegt daran, dass dieser Punkt (also die neueste Korrektur) in einer anderen Farbe angezeigt werden soll. Mit diesem Code erhalte ich abhängig von der Anzahl der gespeicherten Einträge die Koordinaten, die dann im HTML-Code den Platzhalter ersetzen, um die Punkte anzuzeigen:
<script type="text/javascript">
window.addEventListener("load", function() {
SoSciTools.questionnaire.SH01.addImage("../studie/smalldotred.png", [%current_x%, %current_y%]);
SoSciTools.questionnaire.SH01.addImage("../studie/smalldotgrey.png", [%first_x%, %first_x%]);
SoSciTools.questionnaire.SH01.addImage("../studie/smalldotgrey.png", [%second_x%, %second_x%]);
});
</script>
Ich bin mir recht sicher, dass das auch effizienter geht, aber ich bin kein PHP- oder JavaScript-Profi. Und damit, dachte ich, sollte es klappen.