0 votes
in SoSci Survey (dt.) by s052839 (475 points)

Lieber Support,

ich würde in meinem Fragebogen gern die Funktion end() in PHP benutzen.

Könnte man mir die Freischalten oder sollte ich besser einen Workaround benutzen?

Vielen Dank schon einmal und liebe Grüße!

by SoSci Survey (306k points)
Diese Funktion wird eher selten verwendet ... und mit Zeigern in Arrays zu arbeiten macht den Code i.d.R. recht kompliziert. Wofür benötigen Sie die Funktion denn?
by s052839 (475 points)
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.

1 Answer

0 votes
by SoSci Survey (306k points)
selected by s052839
 
Best answer

Dass ich end() benutze, liegt daran, dass dieser Punkt (also die neueste Korrektur) in einer anderen Farbe angezeigt werden soll

Dann habe ich (glaube ich) eine ganz einfache Lösung für Sie. Verwenden Sie array_pop() statt end().

by s052839 (475 points)
Ja, das klappt. Dankeschön :)

Willkommen im Online-Support von SoSci Survey.

Hier bekommen Sie schnelle und fundierte Antworten von anderen Projektleitern und direkt von SoSci Survey.

→ Eine Frage stellen


Welcome to the SoSci Survey online support.

Simply ask a question to quickly get answers from other professionals, and directly from SoSci Survey.

→ Ask a Question

...