0 votes
in SoSci Survey (dt.) by s137634 (700 points)

Guten Tag,

in meinem Skript werden die 6 Antwortoptionen einer Frage mittels php-code randomisiert und die Positionen der Optionen abgespeichert. Die Ausweichoption ist davon ausgenommen und bleibt immer rechts am rand stehen.
Ich würde gerne aber noch zusätzlich die Reihenfolge der Antwortoptionen abspeichern, weil mir dies die zukünftige Auswertung sehr erleichtern würde.

Als Bsp.:
Es gibt die Antwortoptionen 1, 2, 3, 4, 5, 6
Diese werden Gemisch, z.B. so: 2, 5, 1, 3, 4, 6
Nun wird im Augenblick folgendes gespeichert:
3, 1, 4, 5, 2, 6 (weil Auswahloption 1 auf Position 3, Option 2 auf Position 1, etc. sind)
Es soll aber in eine interne Variable mit sechs Unterkategorien auch die Reihenfolge 2, 5, 1, 3, 4, 6 gespeichert werden.

Das bisherige Skript sieht so aus:

//Hier wird die Reihenfolge der Bilder randomisiert und in IV14 gespeichert
if (!isset($items12)) {
  $items12 = getItems('LG09', 'all');
  $items12 = array_diff($items12 , [-1]);
  shuffle($items12);
  registerVariable($items12);
}
for ($i=0; $i<count($items12); $i++) {
  // Kennung der internen Variable aus Frage-Kennung plus Inhalt des Elements (!) erstellen
  $id = id('IV14', $items12[$i]);
  // Hier den Rang speichern
  put($id, $i + 1);
}
question('LG09', $items12);
}

Das gleiche gilt auch für eine zweite Stelle meines Skripts. hier werden nicht Antwortoptionen, sondern (vier Mal) Seitenkennungen in einem array randomisiert. Auch hier wird die Position in eine interne Variable geschrieben und ich hätte zusätzlich gerne die Reihenfolge. Das Skript hierzu ist:

$Seq_GU = array (
'Seq_GU11' => array('s1GU1', 's2GU1', 's3GU1', 
                 's4GU1', 's5GU1', 's7GU1'),

'Seq_GU21' => array('s1GU2', 's2GU2', 's3GU2', 
                 's4GU2', 's5GU2', 's7GU2'),

'Seq_GU31' => array('s1GU3', 's2GU3', 's3GU3', 
                 's4GU3', 's5GU3', 's6GU3'),

'Seq_GU41' => array('s1GU4', 's2GU4', 's3GU4', 
                 's4GU4', 's5GU4', 's6GU4')
//GU1 = blau, GU2 = orange, GU3 = grün, GU4 = violett (Dummy-Bilder)
//s1 - s5 stehen für die Distraktoren, s6 für Target 1 und s7 für Target 2
);


// Den ersten Block aus dem Array $Seq_GU herausnehmen, etc.
$Seq_GU1 = array_shift($Seq_GU);
$Seq_GU2 = array_shift($Seq_GU);
$Seq_GU3 = array_shift($Seq_GU);
$Seq_GU4 = array_shift($Seq_GU);


//Speichern der Reihenfolge von Targets und Distraktoren in einer internen Variable

$indices1 = array_keys($Seq_GU1);
shuffle($indices1);
registerVariable('indices1');
// Nun die Ränge speichern - und die neue Abfolge der Seiten in $Seq_GU_order speichern
$Seq_GU_order1 = array();
for ($i=0; $i<count($indices1); $i++) {
  // Rang speichern wie oben
  $id = id('IV01', $indices1[$i] + 1);
  put($id, $i + 1);
  // Seite in der Abfolge speichern
  $Seq_GU_order1[$i] = $Seq_GU1[$indices1[$i]];
}

$indices2 = array_keys($Seq_GU2);
shuffle($indices2);
registerVariable('indices2');
// Nun die Ränge speichern - und die neue Abfolge der Seiten in $Seq_GU_order speichern
$Seq_GU_order2 = array();
for ($i=0; $i<count($indices2); $i++) {
  // Rang speichern wie oben
  $id = id('IV03', $indices2[$i] + 1);
  put($id, $i + 1);
  // Seite in der Abfolge speichern
  $Seq_GU_order2[$i] = $Seq_GU2[$indices2[$i]];
}

$indices3 = array_keys($Seq_GU3);
shuffle($indices3);
registerVariable('indices3');
// Nun die Ränge speichern - und die neue Abfolge der Seiten in $Seq_GU_order speichern
$Seq_GU_order3 = array();
for ($i=0; $i<count($indices3); $i++) {
  // Rang speichern wie oben
  $id = id('IV04', $indices3[$i] + 1);
  put($id, $i + 1);
  // Seite in der Abfolge speichern
  $Seq_GU_order3[$i] = $Seq_GU3[$indices3[$i]];
}

$indices4 = array_keys($Seq_GU4);
shuffle($indices4);
registerVariable('indices4');
// Nun die Ränge speichern - und die neue Abfolge der Seiten in $Seq_GU_order speichern
$Seq_GU_order4 = array();
for ($i=0; $i<count($indices4); $i++) {
  // Rang speichern wie oben
  $id = id('IV05', $indices4[$i] + 1);
  put($id, $i + 1);
  // Seite in der Abfolge speichern
  $Seq_GU_order4[$i] = $Seq_GU4[$indices4[$i]];
}

$Seq_GUNeu = [
  1 => $Seq_GU_order1,
  2 => $Seq_GU_order2,
  3 => $Seq_GU_order3,
  4 => $Seq_GU_order4
];
registerVariable('Seq_GUNeu');

$Seq_GU_order = array (
 $Seq_GU_order1,
 $Seq_GU_order2,
 $Seq_GU_order3,
 $Seq_GU_order4
);
// Die Schlüssel mischen, nicht das Array selbst
$indicesA = array_keys($Seq_GU_order);
shuffle($indicesA);

// Jetzt wieder Reihenfolge (der Gegenüberstellungen)
//speichern und ein gemischtes Array erzeugen
$Seq_GUMix = [];
for ($i=0; $i<count($indicesA); $i++) {
  // Rang speichern
  $id = id('IV13', $indicesA[$i] + 1);

registerVariable('Seq_GUMix');

debug($i);
debug($indicesA);
debug($id);
debug($indicesA[$i]);

  put($id, $i + 1);
  // Teil-Array speichern
  $Seq_GUMix[$i] = $Seq_GU_order[$indicesA[$i]];
}

setPageOrder($Seq_GUMix[0], 'S2', $Seq_GUMix[1], 'S3', $Seq_GUMix[2], 'S4', $Seq_GUMix[3], 'GK' );
}

Etwas lang, aber so lassen sich vermutlich besser die Variablennamen etc. nachvollziehen. Bsp. für eine relevanten Stelle wäre:

//Speichern der Reihenfolge von Targets und Distraktoren in einer internen Variable
    
$indices1 = array_keys($Seq_GU1);
shuffle($indices1);
registerVariable('indices1');
// Nun die Ränge speichern - und die neue Abfolge der Seiten in $Seq_GU_order speichern
$Seq_GU_order1 = array();
for ($i=0; $i<count($indices1); $i++) {
  // Rang speichern wie oben
  $id = id('IV01', $indices1[$i] + 1);
  put($id, $i + 1);
  // Seite in der Abfolge speichern
  $Seq_GU_order1[$i] = $Seq_GU1[$indices1[$i]];
}

Anhand dessen kann ich das Skript auch für die anderen Teile anpassen, denke ich.
Wie muss beides jeweils geändert werden?

Vielen Dank im Voraus und liebe Grüße!

1 Answer

0 votes
by SoSci Survey (304k points)

Nun wird im Augenblick folgendes gespeichert

Sie speichern aktuell die Ränge - entsprechend der Anleitung put() - Randomisierung - und im Prinzip können Sie noch den anderen Code aus der Anleitung darunter setzen, um auch die Inhalte (Elemente, Blöcke, Fragen) pro Position zu speichern.

Zu Ihrem konkreten Beispiel:

// Das steht schon da
$indices1 = array_keys($Seq_GU1);
shuffle($indices1);
// Jetzt der Code aus der Anleitung
for ($i=0; $i<count($indices1); $i++) {
  // Kennung der internen Variable aus Frage-Kennung plus Index erstellen
  $id = id('IV88', $i + 1);
  // Hier den Wert aus dem Array speichern
  put($id, $indices1[$i]);
}
// Den restichen Code einfach darunter schreiben
by s137634 (700 points)
edited by s137634
Vielen Dank!

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

...