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 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?
by SoSci Survey (312k points)
Es muss array_values() mit "s" heißen, ich habe das oben korrigiert.
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!
by SoSci Survey (312k 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.
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
by SoSci Survey (312k 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

...