0 votes
in Methoden-Fragen by s213653 (130 points)

Hallo,

ich habe einen etwas spezielleren Fall bei meinem Projekt: und zwar zeige ich den Teilnehmerinnen der Umfrage eine Auswahl von 10 Kategorien. Da sollen sie im Rahmen einer Mehrfachauswahl ankreuzen, welche sie interessieren. Als Filterfrage habe ich jeweils eingestellt, dass, wenn sie Essen ankreuzen auch ein Video zu Essen abgespielt werden soll usw. Das hätte ich prinzipiell also schon geschafft. Nun habe ich vor diesem ganzen Prozess aber noch einen Zufallsgenerator eingebaut, der die Personen so aufteilt, dass sie ein Video zu dem Thema, das sie angekreuzt haben, bekommen oder aber eben die anderen Videos, deren Themen sie nicht gewählt haben (das sind also meine zwei Experimentalgruppen). Ich möchte jetzt, dass, je nachdem, welcher Gruppe die Probandinnen zugeordnet werden, sie entweder 3 Videos zu ihren angekreuzten Themengebieten oder 3 zu den anderen, die sie nicht angekreuzt haben, bekommen. Wenn jemand genau 3 ankreuzt, wäre das eh schon geregelt, aber wenn jemand 7 ankreuzt und in der "positiven" Gruppe ist, würde er momentan noch alle 7 angezeigt bekommen, was eher unpraktisch wäre. Da bräuchte ich jetzt noch einen Zufallsgenerator oder eine Randomisierung, der / die bestimmt, welche der angekreuzten (oder nicht angekreuzten) Themengebiete es werden. Wie gehe ich das an? Denn ich weiß ja nicht im Vorhinein, was bzw. welche Konstellation die Personen ankreuzen? Und an welcher Stelle muss ich den Code einbauen?

Liebe Grüße und danke im Voraus!

by SoSci Survey (304k points)
Tipp: Viele Systeme, die Texte mit Kürzeln formatieren, haben das Sternchen schon lange vor dem Gender-Stern zur Formatierung genutzt. Der Doppelpunkt hingegen ist technisch relativ unproblematisch, und er sieht im Fließtext auch eleganter aus, vgl. Teilnehmer:innen, Expert:innen, ...

1 Answer

0 votes
by SoSci Survey (304k points)

Ich möchte jetzt, dass, je nachdem, welcher Gruppe die Probandinnen zugeordnet werden, sie entweder 3 Videos zu ihren angekreuzten Themengebieten oder 3 zu den anderen, die sie nicht angekreuzt haben, bekommen.

Die Zahl der Kreuzchen werden Sie dann auf 3-7 beschränken müssen ... sonst gibt es Grenzfälle, wo Sie nur 2 oder weniger Videos zeigen können.

Technisch ist es dann gar nicht so schwer. aber man muss in Arrays = Mengenlehre denken. Dafür erstellen Sie, je nach Experimentalgruppe, ein Array mit den gewählten oder nicht gewählten Videos.

if (value('RG01') ==1) {
  $videos = getItems('AB01', 'is', 2);  // Gewählte Themen
} else {
  $videos = getItems('AB01', 'is', 1);  // Nicht gewählte Themen
}

Ich wollte hier eigentliche rst einen Code mit array_diff() schreiben, aber es ist wesentliche einfach, wenn man sich die nicht ausgewählten Items (Code 1) heraussuchen lässt.

Gut, die Liste $videos können wir nun einfach mischen.

shuffle($videos);

Und anschließend nehmen wir einfach die ersten drei davon:

$shop = array_slice($videos, 0, 3);

Jetzt müssen wir die passenden Videos nur noch anzeigen :)

Und an welcher Stelle muss ich den Code einbauen?

Im Zweifelsfall auf der Seite, auf welcher Sie das erste Video anzeigen möchten. Sie werden dann auch noch ein registerVariable() brauchen und eine Array, welches die numerischen Item-Codes in Kennungen für Texte mit dem HTML-Code für die Videos übersetzt. Aber Sie wollten ja zuerst einmal die Lösung für die Randomisierung. Viola.

by s213653 (130 points)
Ich hatte es davor ganz anders und nicht mit PHP Code eingestellt. Nämlich mit zwei Mehrfachauswahl Fragen (der Zufallsgenerator hat entschieden, welche gezeigt wird) und bei der einen waren im Hintergrund alles Filter eingesetzt, dass die richtigen Videos angezeigt werden sollten und bei der anderen die falschen. Dadurch wurden aber eben alle angezeigt, die angekreuzt oder nicht angekreuzt wurden und nicht nur drei. Jetzt hab ich die Mehrfachauswahl Frage nur einmal eingebaut und alle Filter entfernt, weil es so mit einem PHP Code vielleicht doch einfacher geht (der mir aber jetzt noch fehlt). Also muss ich im selben Code bzw. auf derselben Seite, auf der das Array mit obigem Code erzeugt wird, quasi noch einen Code positionieren.

Genau, ich habe bisher für jedes Video eine "Frage" angelegt. Ich bin gerade am Überlegen, ob ich die zwei darauffolgenden Fragen einfach auch noch auf die gleiche Seite mit dem Video packe, damit es beim Ausfüllen keine Verwirrung gibt, auf welches Video sich die Fragen jetzt beziehen. Und ich habe die Videos ja per HTML Code eingepflegt, also müsste man dann die ganzen Links anstatt der Dateinamen in einen Code packen, oder?

Aber mit einem einfachen if value('ZU01') == 1 & html () kann ich das ja nicht machen, weil ich ja irgendwie auf den Code mit dem Array referenzieren muss (also dass genau die Videos, der drei zufällig ausgewählten Items angezeigt werden) und es ja mehrere Videos und Ankreuz-Kombinationsmöglichkeiten gibt. Das verwirrt mich momentan noch ziemlich, wenn ich ehrlich bin.

Kann es sein, dass man in den Code dann für jedes Video schreibt, dass wenn dessen Kategorie unter diesen drei zufälligen Items ist, es im nächsten Schritt auch angezeigt werden soll? Also quasi wenn in diesem $shop = array_slice($videos, 0, 3); Item 1 vorkommt, Spiel Video 1 ganz vereinfacht ausgedrückt :D
by SoSci Survey (304k points)
> Also muss ich im selben Code bzw. auf derselben Seite, auf der das Array mit obigem Code erzeugt wird, quasi noch einen Code positionieren.

Genau. Erst klären Sie mittels PHP-Code, welche Videos Sie zeigen möchten - als Liste von Nummern. Und dann kümmern Sie sich darum, dass die Videos auch angezeigt werden.

> also müsste man dann die ganzen Links anstatt der Dateinamen in einen Code packen, oder?

Wenn Sie ohnehin Fragen "mitnehmen" möchten, dann ist es einfacher, wenn Sie pro Video eine Seite anlegen und dann mittels setPageOrder() festlegen, welche Seiten angezeigt werden sollen. Wenn die Seitenkennung "video1", "video2" u.s.w. heißen, könnten Sie das so machen:

$seiten = [
  1 => 'video1',
  2 => 'video2',
  3 => 'video3',
  // u.s.w.
];

$anzeigen = [];
foreach ($videos as $video) {
  $anzeigen[] = $seiten[$video];
}

setPageOrder($anzeigen, 'weiter');
by s213653 (130 points)
Vielen lieben Dank, das Anzeigen funktioniert jetzt über diesen Code!! Nur die Beschränkung auf drei Videos klappt noch nicht. Es werden zwar die angekreuzten Themen / Videos in der Reihenfolge wie sie der Debug ausgibt abgespielt, aber nicht nur die drei, sondern alle. Muss ich diesbezüglich nicht noch einen zweiten Code wie dieses $shop = array_slice($videos, 0, 3) einbauen? oder einen, der die anderen Seiten mit den nicht gewählten Themen / Videos ausblendet?
by SoSci Survey (304k points)
> Nur die Beschränkung auf drei Videos klappt noch nicht.

Was zeigt denn debug($videos) an? Dort sollten max. drei Werte auftauchen.

> Muss ich diesbezüglich nicht noch einen zweiten Code wie dieses $shop = array_slice($videos, 0, 3) einbauen?

Ähm, ja, ich dachte, der wäre schon drin. Wenn es diese Zeile ist, dann bitte


foreach ($videos as $video) {

tauschen gegen


foreach ($shop as $video) {
by s213653 (130 points)
Ein großes Dankeschön von meiner Seite! Nun funktioniert mit der Randomisierung alles! :)

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

...