0 votes
in SoSci Survey (dt.) by s085346 (300 points)
edited by s085346

Der vorgeschlagene Lösungsansatz war folgender

Ich würde tatsächlich empfehlen, dass Sie für jeden Block eine eigene
interne Variablen-Frage anlegen. Das ist in der Auswertung deutlich
(!) handlicher. Und in einer weiteren solchen Frage speichern Sie dann
(wie bisher schon) die Reihenfolge der Blöcke.

Stellen Sie sich einfach vor, Sie würden erst einmal nur die
Reihenfolge innerhalb der Blöcke rotieren. Nur, dass Sie dafür kkeine
eigene Variable definieren, sondern mit einem Eintrag (=ein Block) aus
dem "kompletten" Array aller Seiten arbeiten.

Legen Sie ein Array mit allen Block-Nummern (Sie haben diese als 1,
19, 37, ... bezeichnet) an und als Werte die Kennungen der IV-Fragen,
wo die Rotation hingespeichert werden soll. Dann können Sie in einer
kleinen FOREACH-Schleife gemütlich alle Blöcke rotieren und die
Abfolge abspeichern. Details gerne in einer neuen Frage hier im
Online-Support :)

Meine Blöcke sehen aus wie folgt:

$blocks = array (
'B1' => array('ID10CtT1Dec-ID10CtT1IT2','ID10CtT2Dec-ID10CtT2IT2','ID10CtT3Dec-ID10CtT3IT2','ID11CtT1Dec-ID11CtT1IT2','ID11CtT2Dec-ID11CtT2IT2','ID11CtT3Dec-ID11CtT3IT2',
	'ID12CtT1Dec-ID12CtT1IT2','ID12CtT2Dec-ID12CtT2IT2','ID12CtT3Dec-ID12CtT3IT2','ID13CtT1Dec-ID13CtT1IT2','ID13CtT2Dec-ID13CtT2IT2','ID13CtT3Dec-ID13CtT3IT2',
	'ID14CtT1Dec-ID14CtT1IT2','ID14CtT2Dec-ID14CtT2IT2','ID14CtT3Dec-ID14CtT3IT2','ID15CtT1Dec-ID15CtT1IT2','ID15CtT2Dec-ID15CtT2IT2','ID15CtT3Dec-ID15CtT3IT2'),

'B2' => array('ID20CtT1Dec-ID20CtT1IT2','ID20CtT2Dec-ID20CtT2IT2','ID20CtT3Dec-ID20CtT3IT2','ID21CtT1Dec-ID21CtT1IT2','ID21CtT2Dec-ID21CtT2IT2','ID21CtT3Dec-ID21CtT3IT2',
	'ID22CtT1Dec-ID22CtT1IT2','ID22CtT2Dec-ID22CtT2IT2','ID22CtT3Dec-ID22CtT3IT2','ID23CtT1Dec-ID23CtT1IT2','ID23CtT2Dec-ID23CtT2IT2','ID23CtT3Dec-ID23CtT3IT2',
	'ID24CtT1Dec-ID24CtT1IT2','ID24CtT2Dec-ID24CtT2IT2','ID24CtT3Dec-ID24CtT3IT2','ID25CtT1Dec-ID25CtT1IT2','ID25CtT2Dec-ID25CtT2IT2','ID25CtT3Dec-ID25CtT3IT2'),

'B3' => array('ID30CtT1Dec-ID30CtT1IT2','ID30CtT2Dec-ID30CtT2IT2','ID30CtT3Dec-ID30CtT3IT2','ID31CtT1Dec-ID31CtT1IT2','ID31CtT2Dec-ID31CtT2IT2','ID31CtT3Dec-ID31CtT3IT2',
	'ID32CtT1Dec-ID32CtT1IT2','ID32CtT2Dec-ID32CtT2IT2','ID32CtT3Dec-ID32CtT3IT2','ID33CtT1Dec-ID33CtT1IT2','ID33CtT2Dec-ID33CtT2IT2','ID33CtT3Dec-ID33CtT3IT2',
	'ID34CtT1Dec-ID34CtT1IT2','ID34CtT2Dec-ID34CtT2IT2','ID34CtT3Dec-ID34CtT3IT2','ID35CtT1Dec-ID35CtT1IT2','ID35CtT2Dec-ID35CtT2IT2','ID35CtT3Dec-ID35CtT3IT2'),

'B4' => array('ID40CtT1Dec-ID40CtT1IT2','ID40CtT2Dec-ID40CtT2IT2','ID40CtT3Dec-ID40CtT3IT2','ID41CtT1Dec-ID41CtT1IT2','ID41CtT2Dec-ID41CtT2IT2','ID41CtT3Dec-ID41CtT3IT2',
	'ID42CtT1Dec-ID42CtT1IT2','ID42CtT2Dec-ID42CtT2IT2','ID42CtT3Dec-ID42CtT3IT2','ID43CtT1Dec-ID43CtT1IT2','ID43CtT2Dec-ID43CtT2IT2','ID43CtT3Dec-ID43CtT3IT2',
	'ID44CtT1Dec-ID44CtT1IT2','ID44CtT2Dec-ID44CtT2IT2','ID44CtT3Dec-ID44CtT3IT2','ID45CtT1Dec-ID45CtT1IT2','ID45CtT2Dec-ID45CtT2IT2','ID45CtT3Dec-ID45CtT3IT2'),

'B5' => array('ID50CtT1Dec-ID50CtT1IT2','ID50CtT2Dec-ID50CtT2IT2','ID50CtT3Dec-ID50CtT3IT2','ID51CtT1Dec-ID51CtT1IT2','ID51CtT2Dec-ID51CtT2IT2','ID51CtT3Dec-ID51CtT3IT2',
	'ID52CtT1Dec-ID52CtT1IT2','ID52CtT2Dec-ID52CtT2IT2','ID52CtT3Dec-ID52CtT3IT2','ID53CtT1Dec-ID53CtT1IT2','ID53CtT2Dec-ID53CtT2IT2','ID53CtT3Dec-ID53CtT3IT2',
	'ID54CtT1Dec-ID54CtT1IT2','ID54CtT2Dec-ID54CtT2IT2','ID54CtT3Dec-ID54CtT3IT2','ID55CtT1Dec-ID55CtT1IT2','ID55CtT2Dec-ID55CtT2IT2','ID55CtT3Dec-ID55CtT3IT2'),

'B6' => array('ID60CtT1Dec-ID60CtT1IT2','ID60CtT2Dec-ID60CtT2IT2','ID60CtT3Dec-ID60CtT3IT2','ID61CtT1Dec-ID61CtT1IT2','ID61CtT2Dec-ID61CtT2IT2','ID61CtT3Dec-ID61CtT3IT2',
	'ID62CtT1Dec-ID62CtT1IT2','ID62CtT2Dec-ID62CtT2IT2','ID62CtT3Dec-ID62CtT3IT2','ID63CtT1Dec-ID63CtT1IT2','ID63CtT2Dec-ID63CtT2IT2','ID63CtT3Dec-ID63CtT3IT2',
	'ID64CtT1Dec-ID64CtT1IT2','ID64CtT2Dec-ID64CtT2IT2','ID64CtT3Dec-ID64CtT3IT2','ID65CtT1Dec-ID65CtT1IT2','ID65CtT2Dec-ID65CtT2IT2','ID65CtT3Dec-ID65CtT3IT2')
				 
);

Inhaltlich habe ich Ihre herangehensweise verstanden, umgesetzt bekomme ich sie nicht. Ich möchte ja nun die randomisierte Reihenfolge von B1-B6 in IV01 (mit 6 Werten) speichern und gleichzeitig die Reihenfolgen der Trials innerhalb B1-B6 in die IVs IV02-IV07 (mit je 18 Werten speichern) + schließlich die Reihenfolge auch mit setPageOrder setzen und auf Seite 'X' fortfahren. Hier bin ich leider bislang gescheitert.

Vielen Dank für Ihre Zeit und Hilfe!

Update:

Meine Lösung, die zwar alle Randomisierung korrekt speichert, sieht wie folgt aus. Allerdings werden beim Durchlaufen manchmal Blöcke (obwohl Reihenfolge gespeichert) nicht präsentiert. Außerdem erscheinen ab ca. der Hälfte (bei Block 3 oder 4) auf einmal alle Frageseiten eines Trials direkt untereinander auf einer Seite. Das hängt nicht systematisch mit einem Block zu sammen, sondern passiert unabhängig der Block Nummer grob nach der Hälfte. Die erste Hälfte läuft reibungslos.

$blocks = array (
'B1' => array('ID10CtT1Dec-ID10CtT1IT2','ID10CtT2Dec-ID10CtT2IT2','ID10CtT3Dec-ID10CtT3IT2','ID11CtT1Dec-ID11CtT1IT2','ID11CtT2Dec-ID11CtT2IT2','ID11CtT3Dec-ID11CtT3IT2',
	'ID12CtT1Dec-ID12CtT1IT2','ID12CtT2Dec-ID12CtT2IT2','ID12CtT3Dec-ID12CtT3IT2','ID13CtT1Dec-ID13CtT1IT2','ID13CtT2Dec-ID13CtT2IT2','ID13CtT3Dec-ID13CtT3IT2',
	'ID14CtT1Dec-ID14CtT1IT2','ID14CtT2Dec-ID14CtT2IT2','ID14CtT3Dec-ID14CtT3IT2','ID15CtT1Dec-ID15CtT1IT2','ID15CtT2Dec-ID15CtT2IT2','ID15CtT3Dec-ID15CtT3IT2'),

'B2' => array('ID20CtT1Dec-ID20CtT1IT2','ID20CtT2Dec-ID20CtT2IT2','ID20CtT3Dec-ID20CtT3IT2','ID21CtT1Dec-ID21CtT1IT2','ID21CtT2Dec-ID21CtT2IT2','ID21CtT3Dec-ID21CtT3IT2',
	'ID22CtT1Dec-ID22CtT1IT2','ID22CtT2Dec-ID22CtT2IT2','ID22CtT3Dec-ID22CtT3IT2','ID23CtT1Dec-ID23CtT1IT2','ID23CtT2Dec-ID23CtT2IT2','ID23CtT3Dec-ID23CtT3IT2',
	'ID24CtT1Dec-ID24CtT1IT2','ID24CtT2Dec-ID24CtT2IT2','ID24CtT3Dec-ID24CtT3IT2','ID25CtT1Dec-ID25CtT1IT2','ID25CtT2Dec-ID25CtT2IT2','ID25CtT3Dec-ID25CtT3IT2'),

'B3' => array('ID30CtT1Dec-ID30CtT1IT2','ID30CtT2Dec-ID30CtT2IT2','ID30CtT3Dec-ID30CtT3IT2','ID31CtT1Dec-ID31CtT1IT2','ID31CtT2Dec-ID31CtT2IT2','ID31CtT3Dec-ID31CtT3IT2',
	'ID32CtT1Dec-ID32CtT1IT2','ID32CtT2Dec-ID32CtT2IT2','ID32CtT3Dec-ID32CtT3IT2','ID33CtT1Dec-ID33CtT1IT2','ID33CtT2Dec-ID33CtT2IT2','ID33CtT3Dec-ID33CtT3IT2',
	'ID34CtT1Dec-ID34CtT1IT2','ID34CtT2Dec-ID34CtT2IT2','ID34CtT3Dec-ID34CtT3IT2','ID35CtT1Dec-ID35CtT1IT2','ID35CtT2Dec-ID35CtT2IT2','ID35CtT3Dec-ID35CtT3IT2'),

'B4' => array('ID40CtT1Dec-ID40CtT1IT2','ID40CtT2Dec-ID40CtT2IT2','ID40CtT3Dec-ID40CtT3IT2','ID41CtT1Dec-ID41CtT1IT2','ID41CtT2Dec-ID41CtT2IT2','ID41CtT3Dec-ID41CtT3IT2',
	'ID42CtT1Dec-ID42CtT1IT2','ID42CtT2Dec-ID42CtT2IT2','ID42CtT3Dec-ID42CtT3IT2','ID43CtT1Dec-ID43CtT1IT2','ID43CtT2Dec-ID43CtT2IT2','ID43CtT3Dec-ID43CtT3IT2',
	'ID44CtT1Dec-ID44CtT1IT2','ID44CtT2Dec-ID44CtT2IT2','ID44CtT3Dec-ID44CtT3IT2','ID45CtT1Dec-ID45CtT1IT2','ID45CtT2Dec-ID45CtT2IT2','ID45CtT3Dec-ID45CtT3IT2'),

'B5' => array('ID50CtT1Dec-ID50CtT1IT2','ID50CtT2Dec-ID50CtT2IT2','ID50CtT3Dec-ID50CtT3IT2','ID51CtT1Dec-ID51CtT1IT2','ID51CtT2Dec-ID51CtT2IT2','ID51CtT3Dec-ID51CtT3IT2',
	'ID52CtT1Dec-ID52CtT1IT2','ID52CtT2Dec-ID52CtT2IT2','ID52CtT3Dec-ID52CtT3IT2','ID53CtT1Dec-ID53CtT1IT2','ID53CtT2Dec-ID53CtT2IT2','ID53CtT3Dec-ID53CtT3IT2',
	'ID54CtT1Dec-ID54CtT1IT2','ID54CtT2Dec-ID54CtT2IT2','ID54CtT3Dec-ID54CtT3IT2','ID55CtT1Dec-ID55CtT1IT2','ID55CtT2Dec-ID55CtT2IT2','ID55CtT3Dec-ID55CtT3IT2'),

'B6' => array('ID60CtT1Dec-ID60CtT1IT2','ID60CtT2Dec-ID60CtT2IT2','ID60CtT3Dec-ID60CtT3IT2','ID61CtT1Dec-ID61CtT1IT2','ID61CtT2Dec-ID61CtT2IT2','ID61CtT3Dec-ID61CtT3IT2',
	'ID62CtT1Dec-ID62CtT1IT2','ID62CtT2Dec-ID62CtT2IT2','ID62CtT3Dec-ID62CtT3IT2','ID63CtT1Dec-ID63CtT1IT2','ID63CtT2Dec-ID63CtT2IT2','ID63CtT3Dec-ID63CtT3IT2',
	'ID64CtT1Dec-ID64CtT1IT2','ID64CtT2Dec-ID64CtT2IT2','ID64CtT3Dec-ID64CtT3IT2','ID65CtT1Dec-ID65CtT1IT2','ID65CtT2Dec-ID65CtT2IT2','ID65CtT3Dec-ID65CtT3IT2')
				 
);

// Den ersten Block aus dem Array $blocks herausnehmen, etc.
$B1 = array_shift($blocks);
$B2 = array_shift($blocks);
$B3 = array_shift($blocks);
$B4 = array_shift($blocks);
$B5 = array_shift($blocks);
$B6 = array_shift($blocks);


//Hier Trials innerhalb der Blöcke

$key1 = array_keys($B1);
shuffle($key1); 
$order1 = array();
for ($i=0; $i<count($key1); $i++) {
  // Kennung der internen Variable aus Frage-Kennung plus Index erstellen
  $id1 = id('IV02', $i + 1);
  // Hier den Wert aus dem Array speichern
  put($id1, $key1[$i]);
  $order1[$i] = $B1[$key1[$i]];
}

$key2 = array_keys($B2);
shuffle($key2); 
$order2 = array();
for ($i=0; $i<count($key2); $i++) {
  // Kennung der internen Variable aus Frage-Kennung plus Index erstellen
  $id2 = id('IV03', $i + 1);
  // Hier den Wert aus dem Array speichern
  put($id2, $key2[$i]);
  $order2[$i] = $B2[$key2[$i]];
}

$key3 = array_keys($B3);
shuffle($key3); 
$order3 = array();
for ($i=0; $i<count($key3); $i++) {
  // Kennung der internen Variable aus Frage-Kennung plus Index erstellen
  $id3 = id('IV04', $i + 1);
  // Hier den Wert aus dem Array speichern
  put($id3, $key3[$i]);
  $order3[$i] = $B3[$key3[$i]];
}

$key4 = array_keys($B4);
shuffle($key4); 
$order4 = array();
for ($i=0; $i<count($key4); $i++) {
  // Kennung der internen Variable aus Frage-Kennung plus Index erstellen
  $id4 = id('IV05', $i + 1);
  // Hier den Wert aus dem Array speichern
  put($id4, $key4[$i]);
  $order4[$i] = $B4[$key4[$i]];
}

$key5 = array_keys($B5);
shuffle($key5); 
$order5 = array();
for ($i=0; $i<count($key5); $i++) {
  // Kennung der internen Variable aus Frage-Kennung plus Index erstellen
  $id5 = id('IV06', $i + 1);
  // Hier den Wert aus dem Array speichern
  put($id5, $key5[$i]);
  $order5[$i] = $B5[$key5[$i]];
}

$key6 = array_keys($B6);
shuffle($key6); 
$order6 = array();
for ($i=0; $i<count($key6); $i++) {
  // Kennung der internen Variable aus Frage-Kennung plus Index erstellen
  $id6 = id('IV07', $i + 1);
  // Hier den Wert aus dem Array speichern
  put($id6, $key6[$i]);
  $order6[$i] = $B6[$key6[$i]];
}

//Hier die Blöcke

$blocks_order = array (
 $order1,
 $order2,
 $order3,
 $order4,
 $order5,
 $order6
);

$rand = array_keys($blocks_order);
shuffle($rand);

$rotation = [];
for ($i=0; $i<count($rand); $i++) {
  $id0 = id('IV01', $i + 1);
  // Hier den Wert aus dem Array speichern
  put($id0, $rand[$i]);
  $rotation[$i] = $blocks_order[$rand[$i]];
}

setPageOrder($rotation[0],  $rotation[1], $rotation[2], $rotation[3], $rotation[4], $rotation[5], 'FFMQ' );
by SoSci Survey (327k points)
> Inhaltlich habe ich Ihre herangehensweise verstanden, umgesetzt bekomme ich sie nicht.

Fangen Sie mit dem Code an, den Sie zum Mischen mit Speichern der Reihenfolge verwenden. Also das mit array_keys() und shuffle(). Dort "stecken" Sie ein Array hinein. Machen Sie im ersten Schritt genau das mit $blocks['B1'].
by s085346 (300 points)
Vielen Dank, ich habe nun durch Ihre Hilfe einen funktionierenden Weg gefunden!
by s085346 (300 points)
Ich hatte mich wohl etwas zu früh gefreut. Das Problem und den Code habe ich oben ergänzt
by SoSci Survey (327k points)
Schade, schade ... aber kein Problem, dann sehen wir uns das gleich mal an.

1 Answer

0 votes
by SoSci Survey (327k points)
selected by s085346
 
Best answer

Ich habe den Code mal ein wenig schlanker formuliert - mit Schleife statt Wiederholung:

$blocks = array (
  'B1' => array('ID10CtT1Dec-ID10CtT1IT2','ID10CtT2Dec-ID10CtT2IT2','ID10CtT3Dec-ID10CtT3IT2','ID11CtT1Dec-ID11CtT1IT2','ID11CtT2Dec-ID11CtT2IT2','ID11CtT3Dec-ID11CtT3IT2',
	'ID12CtT1Dec-ID12CtT1IT2','ID12CtT2Dec-ID12CtT2IT2','ID12CtT3Dec-ID12CtT3IT2','ID13CtT1Dec-ID13CtT1IT2','ID13CtT2Dec-ID13CtT2IT2','ID13CtT3Dec-ID13CtT3IT2',
	'ID14CtT1Dec-ID14CtT1IT2','ID14CtT2Dec-ID14CtT2IT2','ID14CtT3Dec-ID14CtT3IT2','ID15CtT1Dec-ID15CtT1IT2','ID15CtT2Dec-ID15CtT2IT2','ID15CtT3Dec-ID15CtT3IT2'),

  'B2' => array('ID20CtT1Dec-ID20CtT1IT2','ID20CtT2Dec-ID20CtT2IT2','ID20CtT3Dec-ID20CtT3IT2','ID21CtT1Dec-ID21CtT1IT2','ID21CtT2Dec-ID21CtT2IT2','ID21CtT3Dec-ID21CtT3IT2',
	'ID22CtT1Dec-ID22CtT1IT2','ID22CtT2Dec-ID22CtT2IT2','ID22CtT3Dec-ID22CtT3IT2','ID23CtT1Dec-ID23CtT1IT2','ID23CtT2Dec-ID23CtT2IT2','ID23CtT3Dec-ID23CtT3IT2',
	'ID24CtT1Dec-ID24CtT1IT2','ID24CtT2Dec-ID24CtT2IT2','ID24CtT3Dec-ID24CtT3IT2','ID25CtT1Dec-ID25CtT1IT2','ID25CtT2Dec-ID25CtT2IT2','ID25CtT3Dec-ID25CtT3IT2'),

  'B3' => array('ID30CtT1Dec-ID30CtT1IT2','ID30CtT2Dec-ID30CtT2IT2','ID30CtT3Dec-ID30CtT3IT2','ID31CtT1Dec-ID31CtT1IT2','ID31CtT2Dec-ID31CtT2IT2','ID31CtT3Dec-ID31CtT3IT2',
	'ID32CtT1Dec-ID32CtT1IT2','ID32CtT2Dec-ID32CtT2IT2','ID32CtT3Dec-ID32CtT3IT2','ID33CtT1Dec-ID33CtT1IT2','ID33CtT2Dec-ID33CtT2IT2','ID33CtT3Dec-ID33CtT3IT2',
	'ID34CtT1Dec-ID34CtT1IT2','ID34CtT2Dec-ID34CtT2IT2','ID34CtT3Dec-ID34CtT3IT2','ID35CtT1Dec-ID35CtT1IT2','ID35CtT2Dec-ID35CtT2IT2','ID35CtT3Dec-ID35CtT3IT2'),

  'B4' => array('ID40CtT1Dec-ID40CtT1IT2','ID40CtT2Dec-ID40CtT2IT2','ID40CtT3Dec-ID40CtT3IT2','ID41CtT1Dec-ID41CtT1IT2','ID41CtT2Dec-ID41CtT2IT2','ID41CtT3Dec-ID41CtT3IT2',
	'ID42CtT1Dec-ID42CtT1IT2','ID42CtT2Dec-ID42CtT2IT2','ID42CtT3Dec-ID42CtT3IT2','ID43CtT1Dec-ID43CtT1IT2','ID43CtT2Dec-ID43CtT2IT2','ID43CtT3Dec-ID43CtT3IT2',
	'ID44CtT1Dec-ID44CtT1IT2','ID44CtT2Dec-ID44CtT2IT2','ID44CtT3Dec-ID44CtT3IT2','ID45CtT1Dec-ID45CtT1IT2','ID45CtT2Dec-ID45CtT2IT2','ID45CtT3Dec-ID45CtT3IT2'),

  'B5' => array('ID50CtT1Dec-ID50CtT1IT2','ID50CtT2Dec-ID50CtT2IT2','ID50CtT3Dec-ID50CtT3IT2','ID51CtT1Dec-ID51CtT1IT2','ID51CtT2Dec-ID51CtT2IT2','ID51CtT3Dec-ID51CtT3IT2',
	'ID52CtT1Dec-ID52CtT1IT2','ID52CtT2Dec-ID52CtT2IT2','ID52CtT3Dec-ID52CtT3IT2','ID53CtT1Dec-ID53CtT1IT2','ID53CtT2Dec-ID53CtT2IT2','ID53CtT3Dec-ID53CtT3IT2',
	'ID54CtT1Dec-ID54CtT1IT2','ID54CtT2Dec-ID54CtT2IT2','ID54CtT3Dec-ID54CtT3IT2','ID55CtT1Dec-ID55CtT1IT2','ID55CtT2Dec-ID55CtT2IT2','ID55CtT3Dec-ID55CtT3IT2'),

  'B6' => array('ID60CtT1Dec-ID60CtT1IT2','ID60CtT2Dec-ID60CtT2IT2','ID60CtT3Dec-ID60CtT3IT2','ID61CtT1Dec-ID61CtT1IT2','ID61CtT2Dec-ID61CtT2IT2','ID61CtT3Dec-ID61CtT3IT2',
	'ID62CtT1Dec-ID62CtT1IT2','ID62CtT2Dec-ID62CtT2IT2','ID62CtT3Dec-ID62CtT3IT2','ID63CtT1Dec-ID63CtT1IT2','ID63CtT2Dec-ID63CtT2IT2','ID63CtT3Dec-ID63CtT3IT2',
	'ID64CtT1Dec-ID64CtT1IT2','ID64CtT2Dec-ID64CtT2IT2','ID64CtT3Dec-ID64CtT3IT2','ID65CtT1Dec-ID65CtT1IT2','ID65CtT2Dec-ID65CtT2IT2','ID65CtT3Dec-ID65CtT3IT2')
				 
);

$intIDs = [
  'B1' => 'IV02',
  'B2' => 'IV03',
  'B3' => 'IV04',
  'B4' => 'IV05',
  'B5' => 'IV06',
  'B6' => 'IV07'
];

foreach ($blocks as $blockID => $pages) {
  $intID = $intIDs[$blockID];  // IV02 u.s.w.
  $keys = array_keys($pages);
  shuffle($keys); 
  $order = [];
  for ($i=0; $i<count($keys); $i++) {
    // Kennung der internen Variable aus Frage-Kennung plus Index erstellen
    $id1 = id($intID, $i + 1);
    // Hier den Wert aus dem Array speichern
    put($id1, $keys[$i]);
    $order[] = $pages[$keys[$i]];
  }
  $blocks[$blockID] = $order;
}

$keys = array_keys($blocks);
shuffle($keys);

$rotation = [];
for ($i=0; $i<count($keys); $i++) {
  $id0 = id('IV01', $i + 1);
  // Hier den Wert aus dem Array speichern
  put($id0, $keys[$i]);
  $rotation[] = $blocks[$keys[$i]];
}

setPageOrder($rotation, 'FFMQ' );

Aber nach allem was ich sehe, sollte Ihr Code eigentlich sauber funktionieren. Die Reihenfolge der Blöcke steht in IV01** und die Reihenfolge innerhalb jedes Blocks dann in IV02 (Block B1), IV03 (Block B2) u.s.w.

Jetzt müssten Sie bitte kurz schildern, was genau nicht funktioniert?

by s085346 (300 points)
Vielen Dank für das Vereinfachen - allerdings funktioniert jetzt die Randomisierung der Trials innerhalb der Blöcke nicht mehr (laufen ohne Randomisierung durch). Diese funktionierte mit meinem unnötig ausschweifenden Code vorher noch. Ich seh auf spontan aber nicht, woran das liegt. Anschließend würde ich nochmals testen und dann ggfs. den Fehler detaillierter schildern, wenn er noch besteht.
by SoSci Survey (327k points)
Oh ja, da fehlte noch eine Zeile am Ende der ersten FOR-Schleife. Ich habe das oben ergänzt:

      $blocks[$blockID] = $order;
by s085346 (300 points)
Die Speicherung funktioniert mit Ihrem schlanken Code tadellos. Allerdings habe ich nach einigen Tests folgendes Problem. Nach einer unsystematischen Anzahl an Trials (=Seitenabfolgen) und Blöcken erscheint nicht mehr 1 Seite des Trials einzeln auf dem Screen und dann die nächste etc., sondern alle 4 Seiten eines Trials oder die letzte Seite eines Trials und die 3 ersten des nächsten Trials auf einem Screen. Bis zu diesem Moment läuft alles wie es soll. Dabei gibt es keinen spezifischen Block, ab dem der Fehler auftritt. Der Fehler tritt auch nicht immer beim Blockwechsel auf, sondern manchmal auch mitten in einem Block. Sobald der Fehler auftritt, "springt" es auch nicht mehr in das korrekte Verhalten zurück, sondern bleibt ab da fehlerhaft. Können Sie mir grob folgen und haben eine Idee woran das liegen könnte?
by SoSci Survey (327k points)
> sondern alle 4 Seiten eines Trials oder die letzte Seite eines Trials und die 3 ersten des nächsten Trials auf einem Screen.

Was zeigt denn die Debug-Information in diesem Fall an?

Die Seite mit dem PHP-Code ist vor der ersten Seite (ID10CtT1Dec) und wird im Laufe der Rotation auch nicht aufgerufen, korrekt?
by s085346 (300 points)
Genau, der php Code ist auf der Seite vor allen Trials und wird in der Rotation auch nicht aufgerufen.
Einen Fehler in dem Sinne gibt es im Debug-Modus nicht. Solange alles funktioniert, wird links oben korrekt die gezogene Seite angezeigt und bei den Debug-Informationen eben das, was auf der Seite passiert. Ab Zeitpunkt X erscheinen links oben 5 Seiten Angaben (SeiteV+SeiteW+SeiteX+SeiteY+SeiteZ), wobei meistens V-Y die letzen 4 Seiten des aktuellen Trials und Z die erste Seite eines anderen Trials sind. Im Debug stehen dann auch die Events aller 5 Seiten untereinander und diese werden auf einmal dargeboten (statt seriell wie zuvor).
Vielleicht kurz zur Erkärung des Trialaufbaus: Seite1=Entscheidung der ProbandInnen, Seite2=Feedback (nur Bild), Seite 3 = blank Screen, Seite 4 = 2. Feedback (nur Text), Seite 5 = blank Screen. Ab dem Bug sind dann eben häufig Seite 2-5 des aktuellen Trials, sowie Seite 1 des nächsten Trials auf einer Seite zu sehen. Die Seiten 2-5 laufen zudem immer automatisch per Timer wie im Manual beschrieben durch, sodass nur auf Seite1 eine Option gewählt wird. Merkwürdig ist eben, dass dieses Problem vollkommen zufällig auftritt, manchmal recht früh, bei keinem bestimmten Block und auch bei keiner bestimmten Variable.
by SoSci Survey (327k points)
> Einen Fehler in dem Sinne gibt es im Debug-Modus nicht

Das meine ich auch gar nicht - ich meine, welchen Inhalt die Debug-Information (rechts oben) berichtet? https://www.soscisurvey.de/help/doku.php/de:create:debugging
by s085346 (300 points)
Das ist zu Beispiel die Information, von der ersten Seite, ab der das Problem unystematisch auftritt. Seite 69 war die Entscheidung auf der vorhergehenden Seite. Alle folgenden Seiten sollten wie bisher auf eigenen Seiten dargestellt sein, erscheinen nun aber gesammelt.

[Information]    Interview Nummer 58 wird fortgesetzt
[Information]    Der Fragebogen 0_emo_v2 im Projekt ugb wird verwendet
[Information]    Die Verweildauer auf Seite 69 war 2 Sekunden
[Verarbeitung]    Lese Antworten von Seite 69
[Information]    Antwort auf A114_01 = 4
[Information]    Antwort auf A114_01a = 1234
[Information]    Fragen bisher zu 98% vollständig beantwortet
[Information]    Entsprechend der vorher festgelegten Seitenabfolge wird Seite 70 [ID14CtT2F] angezeigt
[Verarbeitung]    Erstelle Seite 70 in Fragebogen 0_emo_v2
[Information]    value("ZF01") = 1
[Information]    value("A114_01") = 4
[Information]    Die interne Variable IV11_56 wird mit dem Wert 2 belegt.
[Information]    Springe zur nächsten Seite Nr. 71
[Verarbeitung]    Erstelle Seite 71 in Fragebogen 0_emo_v2
[Information]    Springe zur nächsten Seite Nr. 72
[Verarbeitung]    Erstelle Seite 72 in Fragebogen 0_emo_v2
[Information]    value("A114_01") = 4
[Information]    value("A114_01") = 4
[Information]    value("A114_01") = 4
[Information]    value("A114_01") = 4
[Information]    value("A114_01") = 4
[Information]    Springe zur nächsten Seite Nr. 73
[Verarbeitung]    Erstelle Seite 73 in Fragebogen 0_emo_v2
[Information]    Springe zur nächsten Seite Nr. 79
[Verarbeitung]    Erstelle Seite 79 in Fragebogen 0_emo_v2
[Inhalt]    Erstelle Frage A116
[Information]    Folgende Platzhalter sind vorbereitet:
%remain% = (Text) 0.5
by SoSci Survey (327k points)
Gut, die ganzen "Springe zur nächsten Seite ..." sprechen dafür, dass auf Seite 70, 71, 72 irgendwo ein goToPage('next') stehen könnte. Ist das der Fall?
by s085346 (300 points)
Ja, innerhalb eines jeden Trials "laufen" nach der Entscheidung auf S.1 die 4 Feedbackseiten (S.2-5) nacheinander mit einem Timer und automatischem Weiter durch. Demnach sind auf den Seiten 2-5 eines Trials immer goToPage('next') Befehle. Allerdings ist das in JEDEM Trial der Fall, also auch in den ganzen bevor der Fehler auftritt.
by SoSci Survey (327k points)
Ich vermute das Problem besteht dann darin, dass Ihr Timer einfach abgelaufen ist und daher die Seiten alle übersprungen werden.

Vermutlich müssten Sie für jeden Block einen separaten Timer laufen lassen - und entsprechend die Timer-Variable (im PHP-Code) anders benennen.
by s085346 (300 points)
Was ein abgelaufener Timer alles anrichten kann. Vielen Dank für den Hinweis und Ihre Geduld. So wie es aussieht, läuft jetzt alles :)

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

...