0 votes
in SoSci Survey (dt.) by s222544 (565 points)

Hallo Support,

meine Frage baut auf dem Information Provision Experiment auf (hier dargestellt: https://support.soscisurvey.de/?qa=42714/information-provision-experiment-bedingungen-verknupfen).

Ich möchte Schieberegler auf einen bestimmten Wert setzen, habe dafür aber sehr viel PHP Code und frage mich, ob man diesen nicht kompakter gestalten kann.

EX04 ist die EG, EX05 ist die KG. SL01 sind die 3 Schieberegler, die jeweils, wenn der erste Stimul ausgewählt werden sollte, auf 76, 6 und 18 gesetzt werden sollte. Bei jedem der 36 Stimuls sollen andere Werte gesetzt werden. Aus 36 möglichen Stimuls werden den Probanden 7 zufällig ausgewählt; dabei bleibt der Proband in der ursprünglichen Gruppe - also KG bleibt KG und EG bleibt EG.

if (
  (value('EX04_01') == 1) or
  (value('EX05_01') == 1) or 
  (value('EX04_02') == 1) or
  (value('EX05_02') == 1) or 
  (value('EX04_03') == 1) or
  (value('EX05_03') == 1) or
  (value('EX04_04') == 1) or
  (value('EX05_04') == 1) or 
  (value('EX04_05') == 1) or
  (value('EX05_05') == 1) or 
  (value('EX04_06') == 1) or
  (value('EX05_06') == 1) or
  (value('EX04_07') == 1) or
  (value('EX05_07') == 1)

) {
  preset('SL01_01',76);
  preset('SL01_02',6);
  preset('SL01_03',18);

}

Diesen PHP Code müsste ich dann für alle meine 36 Stimuli wiederholen, sodass anstatt ==1, nächstes Mal ==2 erscheint usw. bis 36.

Gibt es einen einfacheren Weg?

Vielen Dank im Voraus!

1 Answer

0 votes
by SoSci Survey (304k points)

EX04 ist die EG, EX05 ist die KG.

Das irritiert mich ... normalerweise hat man eine (!) Variable für eine EInteilung in EG/KG.

Bei jedem der 36 Stimuls sollen andere Werte gesetzt werden.

Am einfachsten definieren Sie eine Liste (Array) je nach Gruppe und machen diese für die weiteren Seiten mittels registerVariable() verfügbar.

if (value('EX04') == 1) {
  $presets = [
    1 => [76, 18],
    2 => [25, 22],
    ...
    32 => [53, 43]
  ];
} else {
  $presets = [
    1 => [56, 38],
    2 => [35, 42],
    ...
    32 => [33, 33]
  ];
}
registerVariable($presets);

Sie sehen, dass ich hier in jeder Liste die 32 Einträge = 32 Zeilen für die 32 Schieberegler-Paare definiert haben. Und weil es Paare sind, eben nicht nur ein Wert, sondern jeweils ein neues Array aus zwei Werten. Die können wir nun bequem nutzen. Also für das erste Paar:

preset('SL01_01', $preset[1][0]);
preset('SL01_02', $preset[1][1]);

Für das zweite Paar dann:

preset('SL02_01', $preset[2][0]);
preset('SL02_02', $preset[2][1]);

Und so weiter. Natürlich ist das auch mit Tripeln aus Schiebereglern möglich.

by s222544 (565 points)
Vielen Dank! Habe Ihren Vorschlag in VSC umgesetzt.

Die Schieberegler stehen auf den richtigen Werten, jedoch erscheint dieser Fehler:
Im PHP-Code trat ein Fehler auf.

Fehler im Fragebogen: Undefined array key "17_T"
Zeile: 42

PHP-Code

039 '36_C'=> [25,70,5]
040 ];
041 $code = value('EX06_01');
042 preset('SL01_01', $prozente[$code][0]);
043 preset('SL01_02', $prozente[$code][1]);
044 preset('SL01_03', $prozente[$code][2]);
045

Fehler im Fragebogen: Trying to access array offset on value of type null
Zeile: 42

PHP-Code

039 '36_C'=> [25,70,5]
040 ];
041 $code = value('EX06_01');
042 preset('SL01_01', $prozente[$code][0]);
043 preset('SL01_02', $prozente[$code][1]);
044 preset('SL01_03', $prozente[$code][2]);
045

Fehler im Fragebogen: Undefined array key "17_T"
Zeile: 43

PHP-Code

040 ];
041 $code = value('EX06_01');
042 preset('SL01_01', $prozente[$code][0]);
043 preset('SL01_02', $prozente[$code][1]);
044 preset('SL01_03', $prozente[$code][2]);
045
046 $prozente1 = [

Fehler im Fragebogen: Trying to access array offset on value of type null
Zeile: 43

PHP-Code

040 ];
041 $code = value('EX06_01');
042 preset('SL01_01', $prozente[$code][0]);
043 preset('SL01_02', $prozente[$code][1]);
044 preset('SL01_03', $prozente[$code][2]);
045
046 $prozente1 = [

Fehler im Fragebogen: Undefined array key "17_T"
Zeile: 44

PHP-Code

041 $code = value('EX06_01');
042 preset('SL01_01', $prozente[$code][0]);
043 preset('SL01_02', $prozente[$code][1]);
044 preset('SL01_03', $prozente[$code][2]);
045
046 $prozente1 = [
047 '1_T'=> [76,6,18],

Fehler im Fragebogen: Trying to access array offset on value of type null
Zeile: 44

PHP-Code

041 $code = value('EX06_01');
042 preset('SL01_01', $prozente[$code][0]);
043 preset('SL01_02', $prozente[$code][1]);
044 preset('SL01_03', $prozente[$code][2]);
045
046 $prozente1 = [
047 '1_T'=> [76,6,18],

17_T wurde gerade als erstes vom Zufallsgenerator gezogen..

Warum erscheint die Fehlermeldung, wenn die Regler den richtigen Wert anzeigen?

Vielen Dank!
by SoSci Survey (304k points)
> Fehler im Fragebogen: Undefined array key "17_T"

Wenn ich es richtig sehe, dann verwenden sie das preset() einmal bevor und einmal nachdem Sie das Array mit den Pretests definiert haben. Beim ersten Mal ist dieses Array noch nicht definiert, daher die Fehlermeldungen.

Die richtige Reihenfolge ist

1. Code auslesen und Array definieren
2. preset()-Befehle verwenden, welche auf das Array zugreifen

Wenn das $prozente schon weiter oben definiert wird, dann prüfen sie bitte, ob dort ein Eintrag für "17_T" vorliegt. Ach ja ... Sie scheinen zwei Arrays $prozente und $prozente1 zu definieren. Das ist evtl. falsch und alle Einträge müssen evtl. in ein gemeinsames Array. Da ich Ihren kompletten Code aber nicht kenne, kann ich hier nur spekulieren.
by s222544 (565 points)
Vielen Dank für Ihre Antwort.

Habe jetzt nur noch ein Array in dem beide _C und _T definiert sind. Darunter die preset Funktionen.

$prozente = [
'1_C'=> [76,6,18],
'2_C'=> [74,5,21],
'3_C'=> [77, 4, 19],
'4_C' => [55,40,5],
'5_C'=> [62,35,3],
'6_C'=> [60,29,11],
'7_C'=> [5,51,44],
'8_C'=> [4,62,34],
'9_C'=> [2,65,33],
'10_C'=> [0,96,4],
'11_C'=> [1,93,6],
'12_C'=> [18,75,7],
'13_C'=> [86,6,8],
'14_C'=> [80,5,15],
'15_C'=> [83,8,9],
'16_C'=> [55,42,3],
'17_C'=> [50,30,20],
'18_C'=> [51,34,15],
'19_C'=> [3,65,32],
'20_C'=> [4,77,19],
'21_C'=> [1,79,20],
'22_C'=> [4,70,26],
'23_C'=> [2,89,9],
'24_C'=> [3,92,5],
'25_C'=> [92,3,5],
'26_C'=> [95,4,1],
'27_C'=> [94,2,4],
'28_C'=> [72,12,16],
'29_C'=> [71,8,21],
'30_C'=> [75,5,20],
'31_C'=> [5,75,20],
'32_C'=> [0,86,14],
'33_C'=> [0,91,9],
'34_C'=> [0,70,30],
'35_C'=> [5,95,0],
'36_C'=> [25,70,5],
'1_C'=> [76,6,18],
'2_C'=> [74,5,21],
'3_C'=> [77, 4, 19],
'4_C' => [55,40,5],
'5_C'=> [62,35,3],
'6_C'=> [60,29,11],
'7_C'=> [5,51,44],
'8_C'=> [4,62,34],
'9_C'=> [2,65,33],
'10_C'=> [0,96,4],
'11_C'=> [1,93,6],
'12_C'=> [18,75,7],
'13_C'=> [86,6,8],
'14_C'=> [80,5,15],
'15_C'=> [83,8,9],
'16_C'=> [55,42,3],
'17_C'=> [50,30,20],
'18_C'=> [51,34,15],
'19_C'=> [3,65,32],
'20_C'=> [4,77,19],
'21_C'=> [1,79,20],
'22_C'=> [4,70,26],
'23_C'=> [2,89,9],
'24_C'=> [3,92,5],
'25_C'=> [92,3,5],
'26_C'=> [95,4,1],
'27_C'=> [94,2,4],
'28_C'=> [72,12,16],
'29_C'=> [71,8,21],
'30_C'=> [75,5,20],
'31_C'=> [5,75,20],
'32_C'=> [0,86,14],
'33_C'=> [0,91,9],
'34_C'=> [0,70,30],
'35_C'=> [5,95,0],
'36_C'=> [25,70,5]
];

$code = value('EX06_01');
preset('SL01_01', $prozente[$code][0]);
preset('SL01_02', $prozente[$code][1]);
preset('SL01_03', $prozente[$code][2]);

$code = value('EX06_02');
preset('SL01_01', $prozente[$code][0]);
preset('SL01_02', $prozente[$code][1]);
preset('SL01_03', $prozente[$code][2]);

$code = value('EX06_03');
preset('SL01_01', $prozente[$code][0]);
preset('SL01_02', $prozente[$code][1]);
preset('SL01_03', $prozente[$code][2]);

$code = value('EX06_04');
preset('SL01_01', $prozente[$code][0]);
preset('SL01_02', $prozente[$code][1]);
preset('SL01_03', $prozente[$code][2]);

$code = value('EX06_05');
preset('SL01_01', $prozente[$code][0]);
preset('SL01_02', $prozente[$code][1]);
preset('SL01_03', $prozente[$code][2]);

$code = value('EX06_06');
preset('SL01_01', $prozente[$code][0]);
preset('SL01_02', $prozente[$code][1]);
preset('SL01_03', $prozente[$code][2]);

$code = value('EX06_07');
preset('SL01_01', $prozente[$code][0]);
preset('SL01_02', $prozente[$code][1]);
preset('SL01_03', $prozente[$code][2]);

Bei den heruntergeladenen Daten wird in der Spalte EX06_01, _02, _03 usw. 36_C, 27_T, 27_C etc. angezeigt.

Die Zufallsgeneratoren haben als Werte auch 1_C bis 36_C und 1_T bis 36_T.

Zwar erscheinen jetzt im ersten Stimul Zahlen im Schieberegler, jedoch sind es die Falschen... Im Array prozente sind die Zahlen richtig hinterlegt.
Alle anderen Stimuls waren leer, d.h. keine Zahlen waren vorher eingegeben, obwohl ich das im preset definiert habe.

Muss ich noch einen Array anlegen, der den Schieberegler output mit prozente richtig in Verbindung bringt?

Vielen Dank für Ihre Unterstützung!
by SoSci Survey (304k points)
> Zwar erscheinen jetzt im ersten Stimul Zahlen im Schieberegler, jedoch sind es die Falschen

Das preset() wirkt nur auf der aktuellen Seite. Packen Sie also nur die preset() auf die Seite, die Sie auf dieser Seite auch verwenden.

Warum die falschen Werte erscheinen? Sie haben in den pretest()-Blöcken unten immer denselben Schieberegler angegeben. Die Variablenkennung SL01_01 muss jeweils noch angepasst werden.

Und wie gesagt: Das preset() muss immer auf die passende Seite. Das Array können Sie mittels registerVariable() für alle folgenden Seiten verfügbar machen.
by s222544 (565 points)
Vielen Dank für Ihre Antwort! Alles funktioniert!

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

...