0 votes
in SoSci Survey (dt.) by s096975 (130 points)
edited by s096975

`Bei der Erstellung meines Fragebogens bin ich auf folgendes Problem gestoßen:

Ich möchte aus einem Pool von 36 Stimuli (18 Stimuli der Sorte A, 18 Stimuli der Sorte B) jeweils 10 Stimuli beider Sorten zufällig ziehen und zusammen mit einer Frage anzeigen. Dafür habe ich nun zwei Loops erstellt.

Der erste Loop zieht zufällig 10 der 18 Stimuli der Sorte A und der zweite Loop macht dasselbe mit der Sorte B. Mein Problem ist jetzt jedoch, dass im Fragebogen die Loops hintereinander laufen, d.h. erst alle 10 Stimuli der Sorte A gezeigt werden und dann alle Stimuli der Sorte B.

Gibt es eine Möglichkeit, die zwei Loops sich zufällig abwechseln zu lassen, sodass die Stimuli A und B durcheinander angezeigt werden?
Oder, falls das nicht möglich ist, gibt es eine Möglichkeit nur einen Loop zu erstellen, der 20 der 36 Stimuli zufällig zieht, bei denen jedoch trotzdem weiterhin 10 Stimuli der Sorte A und 10 Stimuli der Sorte B gezogen werden?

// Stimuli A abspielen uns dazugehörige Fragen einblenden
$i1=loopPage(10);
$varID1 = 'ZG01x' .sprintf('%02d' , $i1 + 1);
$audioschwul = value($VarID1, 'label');

html('
<audio id="audio_with_controls" preload="auto" autoplay controlList="nodownload">
<source src=" '.$audioschwul.' " type= "audio/mpeg" />
Ihr Browser kann diese Audio-Datei leider nicht abspielen
</audio>
<div style="padding-bottom:20px"></div>
');

question(id('AS', $i1 + 1));

Und dasselbe dann genau so nochmal für Stimuli Sorte B:

// hetero Stimmen abspielen und dazugehörige Fragen einblenden
$i2 = loopPage(10);
$varID2 = 'ZG02x'.sprintf('%02d', $i2 + 1);
$audiohetero = value($varID2, 'label');

html('
<audio id="audio_with_controls" preload="auto" autoplay controlsList="nodownload">
<source src="'.$audiohetero.'" type="audio/mpeg" />
Ihr Browser kann diese Audio-Datei leider nicht abspielen
</audio>
<div style="padding-bottom: 20px"></div>
');

question(id('AH', $i2 + 1));

1 Answer

0 votes
by SoSci Survey (327k points)
edited by SoSci Survey

Eine mögliche Lösung besteht darin, dass Sie Ihre (Teil-)Arrays à 10 Stimuli mittels array_merge() zusammenfügen, nochmals mischen, und dann erst im Loop verwenden.

Dabei müssen Sie darauf achten, dass Sie die Codes für die Stimuli nicht doppeln, also z.B. 1-18 für A-Stimuli und 19-36 für die B-Stimuli. Genaueres kann ich Ihnen gerne verraten, wenn Sie in Ihrer Frage den verwendeten PHP-Code ergänzen oder eine neue Frage mit dem PHP-Code im Online-Support schreiben.

Ergänzung

Danke für den PHP-Code. Wenn ich es richtig sehe, sehen Sie mit ZG01 und ZG02 zwei Zufallsgeneratoren ein. Durchaus sinnvoll. Mit valueList() kann man deren gezogene Codes als Array auslesen.

Ich würde dringend empfehlen, dass Sie die Antworten zu einem bestimmten Stimuli immer in einer bestimmten Variable speichern. Sonst wird es mit der Zuordnung am Ende sehr schwierig. Daher nachfolgend auch eine Lösung mit zusätzlichem Array.

$fragen = array(
  'stimulus1.mp3' => 'AS01',
  'stimulus2.mp3' => 'AS02',
  'stimulus3.mp3' => 'AS03',
  // u.s.w.
);

if ($isset($stimuli)) {
  $stimuliA = valueList('ZG01', null, 'label');
  $stimuliB = valueList('ZG02', null, 'label');
  $stimuli = array_merge($stimuliA, $stimuliB);
  shuffle($stimuli);
  registerVariable($stimuli);
}

$i = loopPage(count($stimuli));
$filename = $stimuli[$i];
html('...');
question($fragen[$filename]);
by s096975 (130 points)
Vielen Dank für die schnelle Antwort. Ich habe die entsprechenden PHP-Codes in meiner Frage ergänzt.
by SoSci Survey (327k points)
Ich habe entsprechend meine Antwort ergänzt :)

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

...