0 votes
in SoSci Survey (dt.) by s278251 (140 points)
edited by SoSci Survey

Guten Tag,

ich habe ein Szenario in dem ich Sätze in der Datenbank hinterlegt habe, die ich per Zufallsgenerator auswähle und in mehreren Bedingungen anzeige. Hier der vorherige Thread:

https://support.soscisurvey.de/?qa=55175/randomisiertes-auswahlen-zetteln-datenbank-zufallsgenerator#c55349

Hier mein aktueller Code:

if (value('MG17') == 1) {
  text('MG18');
} if (value('MG17') == 2) {
  text('MG20');
} if (value('MG17') == 3) {
  text('MG19');
} if (value('MG17') == 4) {
  text('MG18');
} if (value('MG17') == 5) {
  text('MG20');
}


$vars = valueList('FR01', NULL, 'label');



foreach ($vars as $varID) {
  $key = value($varID, 'label');
  $inhalt = dbGet($key);
  html('
    <p> '.$inhalt[0].' </p>
  ');  
}

Diesen Code weiderhole ich auf drei nachfolgenden Seiten für die drei Wahrnehmungstypen die ich in meiner Studie habe. Allerdings möchte ich nun das, je nach Bedingung, alle Wahrnehmungstypen auf einer Seite mit den Sätzen beschrieben werden.
Ein Beispiel hierfür wäre;

Figurseher: Z. trennte sich von seiner Frau und muss von seinen Kindern getrennt leben."
Formseher: N. hat einen Schachmeister besiegt und sich für die nationalen Schachmeisterschaften qualifiziert.
Figurseher: E. kocht gesunde Mahlzeiten und isst frisches Gemüse und Obst.
Grundseher: M. hat nicht das erreicht, was er im Leben wirklich wollte.
....

Anstatt was der Code gerade erzeugt;

Formseher:
Z. trennte sich von seiner Frau und muss von seinen Kindern getrennt leben.
N. hat einen Schachmeister besiegt und sich für die nationalen Schachmeisterschaften qualifiziert.
E. kocht gesunde Mahlzeiten und isst frisches Gemüse und Obst.
M. hat nicht das erreicht, was er im Leben wirklich wollte.
....
Dann auf der nächste Seite;
Grundseher:
...

Ich möchte die Label Figurseher, Formseher und Grundseher vor den Sätzen haben. Diese korrespondieren mit den Werten 1-5 die MG17 ausgibt. Das sind

1 = Form
2 = Grund
3 = Figur
4 = Form
5 = Grund 

Ich hoffe ich konnte mein Szenario verständlich darstellen und freue mich über Hilfe!

by SoSci Survey (308k points)
So ganz verstehe ich die Problemstellung noch nicht ;) Also, Sie haben einen Zufallsgenerator MG17, und dieser zieht Form/Grund/Figur

Wie viele Sätze zeigen Sie jeder Befragten denn an, und wie viele der MG17 Typen bekommt jede Befragte zu sehen - also als Präfix zu den Texten?
by s278251 (140 points)
Der Zufallsgenerator weisst die Teilnehmenden den fünf Bedingungen zu. Die Bedingungen sind:

1 = Formseher mit einer anderen Fremdgruppe (Grund) sieht insgesamt 2 Typen
2 = Grundseher mit einer anderen Fremdgruppe (Form) sieht insgesamt 2 Typen
3 = Figurseher mit zwei anderen Fremdgruppen (Grund & Form) Sieht insgesamt 3 Typen
4 = Formseher mit zwei anderen Fremdgruppen (Grund & Figur) Sieht insgesamt 3 Typen
5 = Grundseher mit zwei anderen Fremdgruppen (Form & Figur) Sieht insgesamt 3 Typen

Je nach Bedingung möchte ich die vorhandenen Gruppen (Eigen & Fremdgruppen) mittels fünf positiver und fünf negativer Sätze vorstellen. Eine Gruppe wird also immer mit insgesamt zehn Sätzen vorgestellt. Dazu habe ich einen Pool aus jeweils 24 positiven/negativen Sätzen in die Datenbank geladen. Diese Sätze möchte ich nun zufällig den Wahrnehmungstypen zuweisen, ohne das es Dopplungen gibt. Mit meinem bisherigen Code ist das möglich, allerdings wird hiermit immer eine Gruppe auf einer Seite vorgestellt und dann auf der nächsten Seite die nächste Gruppe. Um Konfundierungen zu vermeiden möchte ich das alle Gruppen, wie in dem obengenannten Beispiel, mit Präfix, gemischt, auf einer Seite erscheinen.

Lesen Sie auch gerne diesen Thread: https://support.soscisurvey.de/?qa=55175/randomisiertes-auswahlen-zetteln-datenbank-zufallsgenerator#a55180

Hier haben wir das Ziehen der einzelnen Zettel aus der Datenbank erarbeitet.

Vielen Dank für Ihre Hilfe.
by SoSci Survey (308k points)
> Eine Gruppe wird also immer mit insgesamt zehn Sätzen vorgestellt.

Okay, also 20 Sätze in Experimentalgruppen 1 und 2 und 30 Sätze, die angezeigt werden sollen in den Gruppen 3 bis 5. Soweit korrekt?

> Dazu habe ich einen Pool aus jeweils 24 positiven/negativen Sätzen in die Datenbank geladen. Diese Sätze möchte ich nun zufällig den Wahrnehmungstypen zuweisen

Sie hatten oben, glaube ich, notiert, dass pro Gruppe 5 positive und 5 negative Sätze verwendet werden sollen. Sie hätten insgesamt 24x2 = 48 Sätze. Und je nach Experimentalgruppe brauchen Sie davon nun 10+10 oder 15+15 Sätze. Soweit noch korrekt?

> Lesen Sie auch gerne diesen Thread

Nein, für den Überblick über alle Rahmenbedingungen sind Sie zuständig. Ich beantworte Ihnen hier gerne konkrete Fragen ;)

> Um Konfundierungen zu vermeiden möchte ich das alle Gruppen, wie in dem obengenannten Beispiel, mit Präfix, gemischt, auf einer Seite erscheinen.

Ob Sie die Gruppen seitenweise oder komplett auf einer Seite vorstellen, ist technisch eigentlich kein großer Unterschied. Ich sehe in Ihrem aktuellen Code, den Sie in der Frage gepostet haben, aber nichts, was für mehrere Seite sorgen würde. Ist das der Beispielcode für eine einzelne Seite?
by s278251 (140 points)
> Okay, also 20 Sätze in Experimentalgruppen 1 und 2 und 30 Sätze, die angezeigt werden sollen in den Gruppen 3 bis 5.

Korrekt.

> Sie hatten oben, glaube ich, notiert, dass pro Gruppe 5 positive und 5 negative Sätze verwendet werden sollen. Sie hätten insgesamt 24x2 = 48 Sätze. Und je nach Experimentalgruppe brauchen Sie davon nun 10+10 oder 15+15 Sätze.

Auch das ist korrekt.

> Ist das der Beispielcode für eine einzelne Seite?

Genau, dieser Code wiederholt sich auf zwei, bzw. drei (Gruppen 3 bis 5) Seiten um die Wahrnehmungstypen mittels der Sätze vorzustellen.
FR01 ist in dem Code ein Zufallsgenerator der für das Mischen der Sätze zuständig ist. Hier werden 10 Zettel gezogen. Der Inhalt ist folgender:
01 = VP26x01
02 = VP26x02
03 = VP26x03
04 = VP26x04
05 = VP26x05
06 = VN27x01
07 = VN27x02
08 = VN27x03
09 = VN27x04
10 = VN27x05

VP26 und VN27 sind auch Zufallsgeneratoren die jeweils für die positiven und negativen Sätze aus der Datenbank verantwortlich sind. Mit 5 Zetteln sieht ihr Inhalt folgendermaßen aus;

01 = p1
02 = p2
03 = p3
04 = p4
05 = p5
06 = p6
07 = p7
08 = p8
09 = p9
10 = p10
11 = p11
12 = p12
13 = p13
14 = p14
15 = p15
16 = p16
17 = p17
18 = p18
19 = p19
20 = p20
21 = p21
22 = p22
23 = p23
24 = p24

P für die positiven Sätze in der Datenbank und N für die negativen.

Diese Prozedur wiederholt sich momentan 2 bis 3 mal pro interview, je nach Bedingung. Jeweils eine Seite für einen Wahrnehmungstyp. Ich möchte nun, das alle Wahrnehmungstypen gemischt, untereinander auf einer Seite angezeigt werden. Wie kann ich den existierenden Code umschreiben um das zu erreichen? Welche Fragen muss ich gegebenenfalls noch anlegen? Welche weiteren Informationen brauchen Sie noch von mir?
Vielen Dank für Ihre Hilfe!
by SoSci Survey (308k points)
> Diese Prozedur wiederholt sich momentan 2 bis 3 mal pro interview

Das bedeutet wahrscheinlich, dass es vorkommen kann, dass derselbe Satz auf mehreren Seiten angezeigt wird. Wenn Sie das verhindern möchten, dann ziehen Sie nur aus zwei Zufallsgeneratoren jeweils 15 Sätze, und verwenden Sie in Runde 1 die ersten 5, dann die nächsten 5 u.s.w.

Aber wenn ich Sie korrekt verstehe, haben Sie das Ziehen der Sätze scho ganz gut im Griff. Und jetzt möchten Sie abhängig von einem weiteren Zufalsgenerator z.B.

1 = Form
2 = Grund
3 = Figur
4 = Form
5 = Grund

Vor die Sätze schreiben. Jeweils einmal vor die 5 positiven und einmal vor die 5 negativen? Dafür könnten Sie im einfachsten Fall im Zufallsgenerator die 5 Typen mit Komma getrennt angeben, also z.B.

1= Form,Grund,Figur,Form,Grund
2 = ...

Diese Ziehung könnten Sie dann per value(..., 'csv') auslesen, und vor die gezogenen positiven und negative Sätze schreiben, bevor Sie diese mischen.

Je nachdem, wie Sie die Sätze ausgeben, können Sie die Ergänzung direkt im HTML-Code vornehmen oder (ich lese Ihren Code oben so, dass Sie die Sätze in lauter einzelnen Texten abgespeichert haben) über Platzhalter, die Sie in den Texten vorsehen.
by s278251 (140 points)
> Das bedeutet wahrscheinlich, dass es vorkommen kann, dass derselbe Satz auf mehreren Seiten angezeigt wird.

Das war ein ursprüngliches Problem, welches mit dem Zufallsgenerator FR01 gelöst wurde.

> Vor die Sätze schreiben. Jeweils einmal vor die 5 positiven und einmal vor die 5 negativen? Dafür könnten Sie im einfachsten Fall im Zufallsgenerator die 5 Typen mit Komma getrennt angeben, also z.B.

Genau. Allerdings gibt es eine Schwierigkeit. Wie ich oben erwähnte gibt es verschiedene Bedingungen:  

1 = Formseher mit einer anderen Fremdgruppe (Grund) sieht insgesamt 2 Typen
2 = Grundseher mit einer anderen Fremdgruppe (Form) sieht insgesamt 2 Typen
3 = Figurseher mit zwei anderen Fremdgruppen (Grund & Form) Sieht insgesamt 3 Typen
4 = Formseher mit zwei anderen Fremdgruppen (Grund & Figur) Sieht insgesamt 3 Typen
5 = Grundseher mit zwei anderen Fremdgruppen (Form & Figur) Sieht insgesamt 3 Typen

Nicht in jeder Bedingung, ist jeder Wahrnehmungstyp anwesend. Wäre ein Zufallsgenerator dann sinnvoll? Meines Wissens nach könnte er nicht die Bedingung berücksichtigen, sondern würde nur zufällig einen der 5 Typen zuweisen. Allerdings gibt es Bedingungen in denen nur beispielsweise Grundseher und Formseher vorkommen. Wie kann ich das berücksichtigen? Bisher habe ich das über den Befehl 'if (value('MG17')...' gemacht.
Da ich leider weder PHP noch HTML Code beherrsche, bräuchte ich konkrete Textzeilen um die Funktion in meinen Fragebogen einzubauen.
Vielen Dank für Ihre Hilfe!!
by SoSci Survey (308k points)
> Nicht in jeder Bedingung, ist jeder Wahrnehmungstyp anwesend.

Das wäre ja dadurch abgebildert, dass Sie im Zufalsgenerator einfach als Liste hinterlegen, welche Typen (in wecher Reihenfolge) verwendet werden sollen.

Sie würden je nicht mehrere Zeilen ziehen, sondern genau eine Zeile, in der dann Komma-getrennt mehrere Typen (ggf. auch mehrfach) stehen.

> Da ich leider weder PHP noch HTML Code beherrsche

Wir sind ja im akademischen Umfeld - da schaffen wir uns doch gerne ein paar Zusatzqualifikationen drauf ;) Und bei den Details helfe ich natürlich wieder.

Probieren Sie erstmal value(..., 'csv') aus, und schauen Sie, ob Sie damit ein geeignetes Array bekommen. Anschließend versuchen Sie mal, Werte daraus per replace() in Ihre Sätze zu bekommen.
by s278251 (140 points)
Ich verstehe die Logik von dem Befehl value noch nicht ganz. Was trage ich in die Klammer anstatt der Punkte ein und warum? Wo kann ich das array finden? Soll ich den Befehl in den Fragebogen ans Ende der Seite einpflegen? Wo wird mir dann das array angezeigt? Wie kann ich mit dem Befehl replace arbeiten? Verstehe noch nicht was wo ersetzt werden soll.
Stehe etwas auf dem Schlauch hier.
by SoSci Survey (308k points)
Der Befhel value() holt eine Antwort aus dem Datensatz. Der erste Parameter ist der Variablenname (s. Anleitung zu value()), der zweite Parameter verrät, was genau geholt werden soll ... also der Antwortcode, der Antworttext oder im Fall von "csv" dass die Antwort an den Kommas getrennt und als Array zugegeben werden soll.

Sie erhalten dann also eine Liste der Werte in einer Zeile des Zufallsgenerators. Und mit denen können Sie dann arbeiten. So ein Wert kann z.B. via PHP-Filter darüber entscheiden, welcher Stimulus gezeigt wird, oder wie lange eine Seite gezeigt wird.

Beim "wie lange" haben SIe ja ohnehin einen HTML-/JavaScript-Code, und dort steht an irgendeiner Stelle die gewünschte Dauer. Diese Stelle würden Sie durch einen Platzhalter ersetzen. Und einsetzen würden Sie den Wert, den Ihnen value(...) geliefert hat.
by s278251 (140 points)
Ich glaube jetzt verstehe ich Ihre Idee besser. Allerdings sind die Sätze die ich benutze nicht als Text-Variablen abgespeichert sondern in einer excel Tabelle in der Datenbank für Inhalte hinterlegt. Ist es dann immer noch möglich die Präfixe via Platzhalter davor zuschalten?

Wenn ja, hinterlege ich dann die Gruppennamen in dem Zufallsgenerator der die Versuchspersonen in die Bedingungen einteilt (MG17) oder erstelle ich einen neuen?
by SoSci Survey (308k points)
Ob Sie Zahlen oder Kürzel (Datenbank-Schlüssel)im Zufallsgenerator hinterlegen, macht keinen großen Unterschied. Zufallsgenerator und value() liefern Ihnen ja "nur" die Werte, was Sie anschließend damit machen, bleibt Ihnen überlassen.

Platzhalter sollten auch dann funktionieren, wenn sie in der Datenbank für Inhalte stehen, und deren Inhalt per html() ausgegeben wird. Oder Sie können - wenn Sie den Text ohnehin in einer Variable haben - den Namen auch einfach durch das Verketten von Strings ergänzen.

> Wenn ja, hinterlege ich dann die Gruppennamen in dem Zufallsgenerator der die Versuchspersonen in die Bedingungen einteilt (MG17) oder erstelle ich einen neuen?

Nachdem die Gruppennamen fix an die Versuchsgruppen gebunden sind, würde ich sie direkt in dem bereits existierenden Zufallsgenerator hinterlegen.
by s278251 (140 points)
Ich habe die Gruppenbezeichnungen nun in MG17 hinterlegt und bekomme auch ein Array ausgegeben mit dem value() Befehl.

Wie kann ich dieses Array nun für die Platzhalter benutzen?

In der Anleitung steht ich sollte diesen Platzhalter via '$' erstellen, aber ich weis nicht wie ich auf das Array Bezug nehmen kann. Ginge das über; $gruppe = value('MG17','csv'); ?

Wie kann ich die Gruppennamen vor die Sätze schalten, muss ich dafür ein %Platzhalterwort% in jeden Satz in der Datenbank einfügen oder gibt es noch einen einfacheren Weg?

Leider habe ich die Sätze nicht in Textvariablen angelegt.
by SoSci Survey (308k points)
Auf die einzelnen Elemente eines Arrays greifen Sie mich eckigen Klammern zu, vgl. https://www.soscisurvey.de/help/doku.php/de:create:array

html('<p>'.$gruppe[0].' und dann der Satz</p>);

oder eben

replace('%platzhalter%', $gruppe[0]);
by s278251 (140 points)
Ich habe nun einen Code mit dem alle Sätze mit der Gruppenbeschreibung (via Platzhalter) auf einer Seite angezeigt werden. Nun werden hier allerdings die Gruppenbeschreibungen nicht gemischt, sondern erscheinen alle untereinander:

Grundseher "D. unternahm eine schöne Reise nach Vietnam für vier Wochen."

Grundseher "R. überforderte sich mit einem unrealistischen Arbeitspensum, das er nicht bewältigen konnte."

Grundseher "V. scheiterte in seinem Job und sah sich als eine Enttäuschung."

Grundseher "Y. hat sich nicht entschuldigt, obwohl er wusste, dass er es hätte tun sollen."

Grundseher "M. hat nicht das erreicht, was er im Leben wirklich wollte."

Grundseher "F. machte mehrere Solo-Fallschirmsprünge, als er in seinen Zwanzigern war."

Grundseher "K. bestand seine Prüfung entgegen allen Erwartungen seiner Lehrer."

Grundseher "O. sang mit seinen Freunden Karaoke in einer Kneipe."

Grundseher "B. hat sich nicht bemüht, Freundschaften zu pflegen."

Grundseher "A. gibt sich viel Mühe, sich zum Ausgehen zu verkleiden."

Figurseher "G. scheiterte daran, etwas zu bekommen, was er wirklich wollte"

Figurseher "K. gewann Gold bei den Weltmeisterschaften im Kickboxen."

Figurseher "N. konzentrierte sich auf Partys statt auf die Schule und fiel durch seine Prüfungen"

Figurseher "R. ist am Fluss spazieren gegangen und hat den Geräuschen der Natur gelauscht."

Figurseher „O. verzögert die Erledigung selbst der einfachsten Aufgaben"
....

Wie kann ich dafür sorgen, dass die Gruppenbeschreibungen in einer zufälligen Reihenfolge angezeigt werden?

Hier ist mein bisheriger Code;


$vars = valueList('FR02', NULL, 'label');



foreach ($vars as $varID) {
  $key = value($varID, 'label');
  $inhalt = dbGet($key);
  html('
    <p> '.$inhalt[0].' </p>
  ');  
}


value('MG17','csv');
$gruppe = value('MG17','csv');

replace('%plz%', $gruppe[0]);




$vars = valueList('FR01', NULL, 'label');



foreach ($vars as $varID) {
  $key = value($varID, 'label');
  $inhalt = dbGet($key);
  html('
    <p> '.$inhalt[0].' </p>
  ');  
}


value('MG17','csv');
$gruppe = value('MG17','csv');

replace('%plz%', $gruppe[1]);


$vars = valueList('FR03', NULL, 'label');



foreach ($vars as $varID) {
  $key = value($varID, 'label');
  $inhalt = dbGet($key);
  html('
    <p> '.$inhalt[0].' </p>
  ');  
}


value('MG17','csv');
$gruppe = value('MG17','csv');

replace('%plz%', $gruppe[2]);
by SoSci Survey (308k points)
Helfen Sie mir kurz mit den Anzahlen. Sie haben 5 Typen (pro Zeile) in MG17 und zeigen 20 oder 30 Sätze an. Und das alles auf einer Seite. Ist das korrekt?

Eine mögliche Lösung wäre, dass Sie die Liste aus MG17 4-mal bzw. 6-mal wiederholen, und jedesmal mischen, also z.B.

$gruppe = value('MG17','csv');
$types = [];
for ($i=0; $i<6; $i++) {
  shuffle($gruppe);
  $types = array_merge($types, $gruppe);
}

Nun können Sie einfach $types[0] bis $types[29] verwenden, z.B. so:

foreach ($vars as $i => $varID) {
  $key = value($varID, 'label');
  $inhalt = dbGet($key);
  replace('%plz%', $types[$i + 0]);  // Weiter unten dann +20 oder +40
  html('
    <p> '.$inhalt[0].' </p>
  ');  
}

Beachten Sie hier aber bitte, dass Sie die Zuordnung in den Daten nicht sehen. Falls Sie auch das noch brauchen, müssten Sie nochmal einen weiteren Zufallsgenerator anlegen, der aus den Werten 1-5 (entsprechend den 5 Typen, die Sie gezogen haben) 30 Werte zieht.
by s278251 (140 points)
>Helfen Sie mir kurz mit den Anzahlen. Sie haben 5 Typen (pro Zeile) in MG17 und zeigen 20 oder 30 Sätze an. Und das alles auf einer Seite. Ist das korrekt?

Momentan habe ich für die ersten beiden Bedingungen 2 Typen, jeweils 5 mal in einer Zeile hinterlegt (Formseher,Grundseher,Formseher,Grundseher,...). Für die letzten 3 Bedingungen habe ich 3 Typen auch jeweils 5 mal hinterlegt.
Die Anzahl der Typen pro Zeile ist ja schnell geändert, wenn also eine andere Anzahl mehr Sinn macht, ändere ich das kurz.
Für die ersten 2 Bedingungen zeige ich 20 Sätze und für die letzten 3 zeige ich 30, korrekt.

Wie kann ich MG17 mehrmals auf einer Seite wiederholen? Bis jetzt konnte ich ihn immer nur einmal pro Seite einfügen.
Eine Zuordnung ist nicht wichtig für mich, solange ich sicher sein kann, dass alle Typen gleich häufig auftreten.
by SoSci Survey (308k points)
> Wie kann ich MG17 mehrmals auf einer Seite wiederholen?

Nur den Inhalt. Das erledigt oben im Beispiel dieser Code:

$gruppe = value('MG17','csv');
$types = [];
for ($i=0; $i<6; $i++) {
  shuffle($gruppe);
  $types = array_merge($types, $gruppe);
}

Sie können sich mit debug($types) das Ergebnis einfach mal anzeigen lassen.
by s278251 (140 points)
Mit dem debug bekomme ich das Ergebnis angezeigt und verstehe das jetzt besser. Allerdings bekomme ich diese Fehlermeldung angezeigt, wenn ich den Code einpflege:

Im PHP-Code trat ein Fehler auf:
Unsupported operand types: string + int
replace('%plz%', $types[$i + 0]);

Was kann ich tun?
by SoSci Survey (308k points)
edited ago by SoSci Survey
Ach ja, ich bin wieder darüber gestolpert, dass valueList() als Schlüssel die Kennung der Variablen liefert und keine Zahlen. Ändern Sie bitte

$vars = valueList('FR01', NULL, 'label');

zu

$vars = array_values(valueList('FR01', NULL, 'label'));

Randnotiz: Das +0 können Sie eigentlich weglassen, das hatte ich nur symbolisch aufgeschrieben, weil Sie weiter hinten dann +5, +10 u.s.w. brauchen.
ago by s278251 (140 points)
Wenn ich die Textzeile einfüge bekomme ich folgende Fehlermeldung;

Fehler im Fragebogen: Im PHP-Code wurde in Zeile 16 eine Funktion array_value() verwendet. Es gibt diese Funktion nicht.

Darüber hinaus scheint der replace Befehl nicht zu funktionieren. Ich bekomme folgende Fehlermeldung;
Fehler im Fragebogen: Unsupported operand types: string + int
replace('%plz%', $types[$i + 5]);

Wenn ich $types[$i + 5] mit '$gruppe' ersetze bekomme ich folgendes Ergebnis;
Formseher, Figurseher, Formseher, Formseher, Formseher, Figurseher, Figurseher, Grundseher, Grundseher, Grundseher, Grundseher, Figurseher, Formseher, Grundseher, Figurseher "V. scheiterte in seinem Job und sah sich als eine Enttäuschung."

Hier scheinen nun alle im Zufallsgenerator hinterlegten Gruppenbezeichnungen zu erscheinen. Wie kann ich dafür sorgen, dass nur eine Bezeichnung pro Satz erscheint und alle Sätze ihre vorgesehene Bezeichnung randomisiert zugewiesen bekommen?
ago by SoSci Survey (308k points)
Es muss array_values() mit "s" heißen, ich habe das oben korrigiert.
ago by s278251 (140 points)
Vielen Dank, der Code scheint nun zu funktionieren!

Allerdings gibt es noch eine Sache die ich gerne beheben möchte.
Wie oben beschrieben, werden alle Gruppen mit jeweils 5 positiven und 5 ngeativen Sätzen beschrieben. In der Bedingung mit 3 Gruppen macht das 30 Sätze, die bekomme ich auch in meinen Testläufen. Allerdings bekomme ich bei den Bedingungen mit 2 Gruppen, auch 30 Sätze. Wie kann ich den Code so gestalten, dass mir in den Bedingungen der 2 Gruppen, nur 20 Sätze ausgegeben werden?
Darüber hinaus sind die Verteilungen von positiven und negativen Sätzen nicht gleich zwischen den Gruppen. auch dieses Problem würde ich gerne beheben.
Vielen Dank für Ihre Hilfe!
ago by SoSci Survey (308k points)
> Wie kann ich den Code so gestalten, dass mir in den Bedingungen der 2 Gruppen, nur 20 Sätze ausgegeben werden?

Posten Sie bitte nochmal den komplettenn aktuellen PHP-Code, dann tue ich mich mit einer Antwort leichter. Notieren Sie im Code auch, an welcher Stelle sich 30er und 20er-Gruppen unterscheiden.
ago by s278251 (140 points)
if (value('MG17') == 1) {
  text('MG18');
} if (value('MG17') == 2) {
  text('MG20');
} if (value('MG17') == 3) {
  text('MG19');
} if (value('MG17') == 4) {
  text('MG18');
} if (value('MG17') == 5) {
  text('MG20');
}


$vars = array_values(valueList('FR02', NULL, 'label'));





$gruppe = value('MG17','csv');
$types = [];
for ($i=0; $i<6; $i++) {
  shuffle($gruppe);
  $types = array_merge($types, $gruppe);
}


foreach ($vars as $i => $varID) {
  $key = value($varID, 'label');
  $inhalt = dbGet($key);
  replace('%plz%', $types[$i + 5]);  // Weiter unten dann +20 oder +40
  html('
    <p> '.$inhalt[0].' </p>
  ');  
}


$vars = array_values(valueList('FR01', NULL, 'label'));

$gruppe = value('MG17','csv');
$types = [];
for ($i=0; $i<6; $i++) {
  shuffle($gruppe);
  $types = array_merge($types, $gruppe);
}

foreach ($vars as $i => $varID) {
  $key = value($varID, 'label');
  $inhalt = dbGet($key);
  replace('%plz%', $types[$i + 10]);  // Weiter unten dann +20 oder +40
  html('
    <p> '.$inhalt[0].' </p>
  ');  
}





$vars = array_values(valueList('FR03', NULL, 'label'));

$gruppe = value('MG17','csv');
$types = [];
for ($i=0; $i<6; $i++) {
  shuffle($gruppe);
  $types = array_merge($types, $gruppe);
}

foreach ($vars as $i => $varID) {
  $key = value($varID, 'label');
  $inhalt = dbGet($key);
  replace('%plz%', $types[$i + 20]);  // Weiter unten dann +20 oder +40
  html('
    <p> '.$inhalt[0].' </p>
  ');  
}

>  Notieren Sie im Code auch, an welcher Stelle sich 30er und 20er-Gruppen unterscheiden.

Bis jetzt habe ich die verschiedenen Bedingungen auf aufeinanderfolgenden Seiten dargestellt, deswegen fällt es mir schwer einen Punkt im Code zu finden, an dem 20er und 30er Gruppen unterscheiden. Allerdings habe ich 3 Zufallsgeneratoren die für die erste, zweite und dritte Gruppe angelegt sind. Hier sind die Inhalte.
FR01:
01 = VP26x01
02 = VP26x02
03 = VP26x03
04 = VP26x04
05 = VP26x05
06 = VN27x01
07 = VN27x02
08 = VN27x03
09 = VN27x04
10 = VN27x05

FR02:
01 = VP26x06
02 = VP26x07
03 = VP26x08
04 = VP26x09
05 = VP26x10
06 = VN27x06
07 = VN27x07
08 = VN27x08
09 = VN27x09
10 = VN27x10

FR03:
01 = VP26x11
02 = VP26x12
03 = VP26x13
04 = VP26x14
05 = VP26x15
06 = VN27x11
07 = VN27x12
08 = VN27x13
09 = VN27x14
10 = VN27x15

In VP26 und VN27 sind jeweils die positiven und negativen Sätze mittels Kürzel in der Datenbank hinterlegt (p1-p24 & n1-n24).

1 Answer

0 votes
ago by SoSci Survey (308k points)

Eine kleine Korrektur vorab: Sie haben bei den Typen immer ein Offset eingetragen:

replace('%plz%', $types[$i + 5]);  // Weiter unten dann +20 oder +40

Das ist korrekt, aber Sie sollten dafür sorgen, dass Sie die Typen der Reihenfolge nach verwenden, also beim ersten mal +0, beim zweiten mal +10 (wenn beim ersten Mal 10 Typen "verwendet") wurden, beim dritten mal dann +20 (wenn bis dato 20 der Typen verwendet wurden). Im Moment werden die Typen 6-10 zweimal in derselben Abfolge verwendet.

Aber nun zur eigentlichen Frage. Die 30 Fragen/Items werden deshalb angezeigt, weil Sie den Block ab

$vars = array_values(valueList('FR01', NULL, 'label'));

insgesamt dreimal wiederholen. Jeweils mit 10 Fragen/Items. Der Trickt besteht nun also darin, dass Sie die letzte Wiederholung bei Bedarf einfach weglassen. Wenn das auf einer separaten seite steht, dann verwenden Sie einen Filter mit goToPage('next') am Anfang der Seite. Wenn alles auf eine Seite soll, dann bauen Sie den Filter direkt in den Code.

Wenn Sie also z.B. die 30 Wiederholungen nur in den Fällen 1 und 2 haben wollten, könnte das so aussehen:

...

// Die ersten beiden Blöcke wie gehabt

$bedingung = value('MG17');

if (($bedingung == 1) || ($bedingung == 2)) {
    $vars = array_values(valueList('FR03', NULL, 'label'));
    // u.s.w. der dritte Block
}

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

...