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

Vielleicht hier noch einmal zur Übersicht. So sah der Code vorher aus, wo in der internen Variablen IV13 die Position der Gegenüberstellung gespeichert wurde:

//aufteilen nach Bedingung

//Prüfen, ob sequentiell oder simultan vorliegt
//bei simultan:
if (
(value('RA01') == 1) or
(value('RA01') == 2) or
(value('RA01') == 3) or
(value('RA01') == 4)
) { 

//Bestimmung der Reihenfolge der Gegenüberstellungen

// Erst einmal die Seitenkennungen als Array speichern
$order_Sim_GU4 = array( 'GU1', 'GU2', 'GU3', 'GU4' );
//GU1 = blau, GU2 = orange, GU3 = grün, GU4 = violett

//Seiten mischen
$indices = array_keys($order_Sim_GU4);
shuffle($indices);


//speichert die Reihenfolge der Gegenüberstellungen in IV12
$order_Sim_GU4mix = array();
for ($i=0; $i<count($indices); $i++) {
  $id = id('IV12', $indices[$i] + 1);
  put($id, $i + 1);
  $order_Sim_GU4mix[$i] = $order_Sim_GU4[$indices[$i]];
}

// Die erste Seite aus dem Array $pages herausnehmen
$first = array_shift($order_Sim_GU4mix);
// Die zweite Seite aus dem Array $pages herausnehmen
$second = array_shift($order_Sim_GU4mix);
// Die dritte Seite aus dem Array $pages herausnehmen
$third = array_shift($order_Sim_GU4mix);

//Arrays mit der jeweils ausgewürfelten ersten, zweiten 
//und dritten Seite erstellen
$order_Sim_GU1 = array( $first);
$order_Sim_GU2 = array( $second);
$order_Sim_GU3 = array( $third);

// Jetzt das Ergebnis noch als Seitenabfolge festlegen
//Arrays und dazwischenliegende "Start"-Seiten ('S2' - 'S4') anordnen
setPageOrder($order_Sim_GU1, 'S2', $order_Sim_GU2, 'S3', $order_Sim_GU3, 'S4', $order_Sim_GU4mix, 'GK' );
}
// S2 - S4 sind die Startseiten bevor eine GÜ losgeht




//Prüfen, ob sequentiell oder simultan vorliegt
//bei sequentiell:
else {


//Für Target-absent Bedingung 1 (also in Seq_GUs 1 und 2 wird Target_2
//und in Seq_GUs 3 und 4 Target_1 präsentiert)
if (
(value ('RA02') == 1)) {

// Erst einmal die Seitenkennungen als Arrays speichern
$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);
//Reihenfolge speichern (neben Position)
for ($i=0; $i<count($indices1); $i++) {
  // Kennung der internen Variable aus Frage-Kennung plus Index erstellen
  $id = id('IV28', $i + 1);
  // Hier den Wert aus dem Array speichern
  put($id, $indices1[$i]);
}
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);
for ($i=0; $i<count($indices2); $i++) {
  // Kennung der internen Variable aus Frage-Kennung plus Index erstellen
  $id = id('IV29', $i + 1);
  // Hier den Wert aus dem Array speichern
  put($id, $indices2[$i]);
}
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);
for ($i=0; $i<count($indices3); $i++) {
  // Kennung der internen Variable aus Frage-Kennung plus Index erstellen
  $id = id('IV30', $i + 1);
  // Hier den Wert aus dem Array speichern
  put($id, $indices3[$i]);
}
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);
for ($i=0; $i<count($indices4); $i++) {
  // Kennung der internen Variable aus Frage-Kennung plus Index erstellen
  $id = id('IV31', $i + 1);
  // Hier den Wert aus dem Array speichern
  put($id, $indices4[$i]);
}
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 Positionen (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($Seq_GUMix);

  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' );
}


// <-Hier kamen dann noch fünf weitere solcher if-Schleifen, durch die diese Frage aber
// zu lang würde

;}

So hat der Code auch ohne Probleme funktioniert. als ich aber in den jeweiligen if-Schleifen unter

// Jetzt wieder Positionen (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($Seq_GUMix);

folgendes

//Reihenfolge der Gegenüberstellungen speichern
for ($i=0; $i<count($indicesA); $i++) {
  // Kennung der internen Variable aus Frage-Kennung plus Index erstellen
  $id = id('IV52', $i + 1);
  // Hier den Wert aus dem Array speichern
  put($id, $indicesA[$i]);
}

hinzugefügt habe, traten all die Probleme auf. Was müsste ich tun um in der internen Variablen IV52 zusätzlich noch die Reihenfolge zu speichern?

related to an answer for: Positionen einer Randomisierung speichern
closed with the note: Problem selbst gefunden (klasse, wenn Sie mit dem Projekt durch sind, können Sie programmieren!)
by SoSci Survey (305k points)
Nein, die FOR-Schleife hat auf die anderen Teile des Codes keinen Einfluss.

Aber Sie haben da auch einige Inhalte, die nicht viel Sinn machen, das hier zum Beispiel:

for ($i=0; $i<count($indicesA); $i++) {
  // Rang speichern
  $id = id('IV13', $indicesA[$i] + 1);
}

Hier wird überhaupt nichts gemacht - nur eine Variable $id immer wieder neu belegt, aber dann passiert nichts mehr. Ich gehe davon aus, dass dort dereinst die Variable $Seq_GUMix initialisiert wurde - das ist vermutlich auf dem Wrg irgendwann verloren gegangen?
by SoSci Survey (305k points)
PS: Ich verweise nochmal auf die Möglichkeit, den Code einfach mal sauber einrücken zu lassen: http://beautifytools.com/php-beautifier.php - das erleichtert die Fehlersuche ungemein.
by s137634 (700 points)
Sie hatten recht - und ich war einfach nur blind. Aber jetzt habe ich den Fehler endlich gefunden! Ich habe den neuen Textblock einfach an die falsche Position gesetzt. Deswegen hat er Probleme verursacht.

Ich hoffe, dass das hier vorerst die letzte Frage war, die ich gestellt habe, weil ich nun glaube, dass alles so funktioniert, wie ich es brauche :)
Wirklich vielen, vielen, lieben Dank für Ihre Unterstützung!

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

...