0 votes
in SoSci Survey (dt.) by s163127 (125 points)

Hallo liebes Sosci-Team,

ich möchte einen Fragebogen mit mehreren Blöcken (A-E) erstellen. Nach den Blöcken geht es auf Seite 'WIE' weiter. Manche der Blöcke (A, C und E) sollen in sich rotieren und dabei jeweils die Position der einzelnen Seiten gespeichert werden. Außerdem soll es 2 Gruppen geben, wobei in einer Gruppe die Reihenfolge „Block A-E“ sein soll und bei der anderen „Block B-E, A“, was ich mittels eines Zufallsgenerators realisiert habe.
Ich habe folgenden PHP-Code erstellt:

if (!isset($abfolge)) {
  $blockA = ['ASW1A', 'ASW1B', 'ASW1C1', 'ASW1C2', 'ASW1D', 'ASW1E', 'ASW1F', 'ASW2A', 'ASW2B', 'ASW2C1', 'ASW2C2', 'ASW2D', 'ASW2E', 'ASW2F', 'ASM1A', 'ASM1B', 'ASM1C1', 'ASM1C2', 'ASM1D', 'ASM1E', 'ASM1F', 'ASM2A', 'ASM2B', 'ASM2C1', 'ASM2C2', 'ASM2D', 'ASM2E', 'ASM2F'];
  $blockB = 'EI';
  $blockC = ['EZW1A','EZW1B', 'EZW1C1', 'EZW1C2', 'EZW1D', 'EZW1E', 'EZW1F', 'EZW2A', 'EZW2B', 'EZW2C1', 'EZW2C2', 'EZW2D', 'EZW2E', 'EZW2F', 'EZM1A', 'EZM1B', 'EZM1C1', 'EZM1C2', 'EZM1D', 'EZM1E', 'EZM1F', 'EZM2A', 'EZM2B', 'EZM2C1', 'EZM2C2', 'EZM2D', 'EZM2E', 'EZM2F'];
  $blockD = 'FI';
  $blockE = ['FZW1A','FZW1B', 'FZW1C1', 'FZW1C2', 'FZW1D', 'FZW1E', 'FZW1F', 'FZW2A', 'FZW2B', 'FZW2C1', 'FZW2C2', 'FZW2D', 'FZW2E', 'FZW2F', 'FZM1A', 'FZM1B', 'FZM1C1', 'FZM1C2', 'FZM1D', 'FZM1E', 'FZM1F', 'FZM2A', 'FZM2B', 'FZM2C1', 'FZM2C2', 'FZM2D', 'FZM2E', 'FZM2F'];
  
   if (!isset($random3)) {
   $indices3 = array_keys($blockA);
   shuffle($indices3);
   // Nun die Ränge speichern - und die neue Abfolge der Seiten in    $random3 speichern
   $random3 = array();
    for ($i3=0; $i3<count($indices3); $i3++) {
    // Rang speichern wie oben
    $id = id('IV03', $indices3[$i3] + 1);
    put($id, $i3 + 1);
   // Seite in der Abfolge speichern
    $random3[$i3] = $blockA[$indices3[$i3]];
    }
   registerVariable($random3);
   }
  
   if (!isset($random4)) {
   $indices4 = array_keys($blockC);
   shuffle($indices4);
   // Nun die Ränge speichern - und die neue Abfolge der Seiten in    $random4 speichern
   $random4 = array();
    for ($i4=0; $i4<count($indices4); $i4++) {
     // Rang speichern wie oben
     $id = id('IV04', $indices4[$i4] + 1);
     put($id, $i4 + 1);
     // Seite in der Abfolge speichern
     $random4[$i4] = $blockC[$indices4[$i4]];
    }
   registerVariable($random4);
   }
 
   if (!isset($random5)) {
   $indices5 = array_keys($blockE);
   shuffle($indices5);
   // Nun die Ränge speichern - und die neue Abfolge der Seiten in $random5 speichern
   $random5 = array();
    for ($i5=0; $i5<count($indices5); $i5++) {
     // Rang speichern wie oben
     $id = id('IV05', $indices5[$i5] + 1);
     put($id, $i5 + 1);
     // Seite in der Abfolge speichern
     $random5[$i5] = $blockC[$indices5[$i5]];
    }
   registerVariable($random5);
   }
 
  if (value('RG01') == 1) {
    $abfolge = [$blockA, $random3, $blockB, $blockC, $random4, $blockD, $blockE, $random5];
  } else {
    $abfolge = [$blockB, $blockC, $random4, $blockD, $blockE, $random5, $blockA, $random3];
  }
  registerVariable($abfolge);
}
setPageOrder($abfolge, 'WIE');

Mein Problem ist es, dass zwar eine Rotation erstellt und auch in den internen Variablen gespeichert wird, diese aber nicht in die Abfolge übernommen wird bzw. laut Debug-Informationen nicht in setPageOrder übertragen wird. Wie lässt sich das Problem lösen?
Vielen Dank schon mal für Ihre Unterstützung!

by SoSci Survey (330k points)
Was zeigen denn die Debug-Informationen? Und wenn Sie unter das setPageOrder() noch folgende Zeile schreiben, was wir zusätzlich angezeigt?

debug($abfolge);
by s163127 (125 points)
Die Debug-Informationen geben zunächst den gezogenen Code des Zufallsgenerators an, dann werden die internen Variablen jeweils mit einem Wert belegt, dann steht da value("RG01")=2 (bzw. im anderen Fall 1) und dann: Entsprechend setPageOrder() werden nun folgende Seiten gezeigt: 34 [EI], 35[EZW1A], ...
Dabei stimmt die Abfolge der Blöcke entsprechend der Ziehung des Zufallsgenerators, allerdings bleibt die Reihenfolge der Seiten in den Blöcken, in denen die Seiten ihre Position tauschen sollen chronologisch und variiert nicht entsprechend der internen Variablen.
Wenn der PHP-Code bleibt wie oben, d.h.:
  if (value('RG01') == 1) {
    $abfolge = [$blockA, $random3, $blockB, $blockC, $random4, $blockD, $blockE, $random5];
  } else {
    $abfolge = [$blockB, $blockC, $random4, $blockD, $blockE, $random5, $blockA, $random3];
  }
  registerVariable($abfolge);
Dann zeigt die Debug-Information für $abfolge (über debug($abfolge);):
0[Array], 1[Array], 2EI, 3[Array], 4[Array], 5FI, 6[Array], 7[Array]
(Zahlen jeweils hochgestellt)

Eigentlich gehört das $random3, $random4 und $random5 gar nicht in die Abfolge, sondern bezieht sich ja auf Block A bzw. C bzw. E, weshalb ich es im PHP-Code aus if (value('RG01') == 1) ... rausgenommen habe und dieser Teil des PHP-Codes (nur das Ende wurde verändert) nun folgendermaßen aussieht:
  if (value('RG01') == 1) {
    $abfolge = [$blockA, $blockB, $blockC, $blockD, $blockE];
  } else {
    $abfolge = [$blockB, $blockC, $blockD, $blockE, $blockA];
  }
  registerVariable($abfolge);
}
setPageOrder($abfolge, 'WIE');

Auch hier besteht das gleiche Problem wie oben geschildert. Die Allgemeine Debug-Information bleibt gleich und die Debug-Information für $abfolge sieht so aus:
0[Array], 1EI, 2[Array], 3FI, 4[Array]
(Zahlen auch wieder hochgestellt)
by SoSci Survey (330k points)
Und was sagt die Debug-Information über die Seitenabfolge? Wenn setPageOrder() aufgerufen wird, sollte dazu zumindest irgend etwas in der Debug-Information erscheinen.
by s163127 (125 points)
Debug-Information für 'setPageOrder':
'setPageOrder' = setPageOrder (string)

Entsprechend setPageOrder() werden nun folgende Seiten gezeigt:
34 [EI], 35 [EZW1A], 36 [EZW1B], 37 [EZW1C1], 38 [EZW1C2], 39 [EZW1D], 40 [EZW1E], 41 [EZW1F], 42 [EZW2A], 43 [EZW2B], 44 [EZW2C1], 45 [EZW2C2], 46 [EZW2D], 47 [EZW2E], 48 [EZW2F], 49 [EZM1A], 50 [EZM1B], 51 [EZM1C1], 52 [EZM1C2], 53 [EZM1D], 54 [EZM1E], 55 [EZM1F], 56 [EZM2A], 57 [EZM2B], 58 [EZM2C1], 59 [EZM2C2], 60 [EZM2D], 61 [EZM2E], 62 [EZM2F], 63 [FI], 64 [FZW1A], 65 [FZW1B], 66 [FZW1C1], 67 [FZW1C2], 68 [FZW1D], 69 [FZW1E], 70 [FZW1F], 71 [FZW2A], 72 [FZW2B], 73 [FZW2C1], 74 [FZW2C2], 75 [FZW2D], 76 [FZW2E], 77 [FZW2F], 78 [FZM1A], 79 [FZM1B], 80 [FZM1C1], 81 [FZM1C2], 82 [FZM1D], 83 [FZM1E], 84 [FZM1F], 85 [FZM2A], 86 [FZM2B], 87 [FZM2C1], 88 [FZM2C2], 89 [FZM2D], 90 [FZM2E], 91 [FZM2F], 6 [ASW1A], 7 [ASW1B], 8 [ASW1C1], 9 [ASW1C2], 10 [ASW1D], 11 [ASW1E], 12 [ASW1F], 13 [ASW2A], 14 [ASW2B], 15 [ASW2C1], 16 [ASW2C2], 17 [ASW2D], 18 [ASW2E], 19 [ASW2F], 20 [ASM1A], 21 [ASM1B], 22 [ASM1C1], 23 [ASM1C2], 24 [ASM1D], 25 [ASM1E], 26 [ASM1F], 27 [ASM2A], 28 [ASM2B], 29 [ASM2C1], 30 [ASM2C2], 31 [ASM2D], 32 [ASM2E], 33 [ASM2F], 92 [WIE]

Hier werden die Seiten, die rotieren sollen, leider nicht rotiert.
by SoSci Survey (330k points)
> Hier werden die Seiten, die rotieren sollen, leider nicht rotiert.

In Ordnung, wir kommen der Sache näher. Welche Seiten sind es, die rotert werden sollten aber nicht rotiert werden? Die Blöcke in sich? Also EZW1A, EZW1B, EZW1C1, u.s.w.?
by s163127 (125 points)
Genau, es sind die Blöcke in sich, also z.B. Block C mit EZW1A, EZW1B, EZW1C1, ..., EZM2F
Hier sollte beispielsweise zuerst EZM2C1, dann EZW1A, dann EZW1E, ... kommen UND die Positionen gespeichert werden, aber es funktioniert nicht
Bei Block A und E ist es jeweils das gleiche Problem

1 Answer

0 votes
by SoSci Survey (330k points)
selected by s163127
 
Best answer

Bitte entfernen Sie mal alle isset()-IFs abgesehen vom äußersten. Das ist ja lediglich dafür gut, dass der Code nur einmalig ausgeführt wird.

Und dann müssten Sie beim Zusammenbauen des Arrays am Ende eigentlich nur noch die gemischten Variablen $random3 etc. statt $blockA verwenden:

  if (value('RG01') == 1) {
    $abfolge = [$random3, $blockB, $random4, $blockD, $random5];
  } else {
    $abfolge = [$blockB, $random4, $blockD, $random5, $random3];
  }

Ich glaube, da haben Sie eim Entfernen der Dopplung einfach unglücklich die nicht-gemischten Variablen erwischt.

by s163127 (125 points)
Super, jetzt funktioniert es!
Vielen lieben 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

...