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

0 votes

Guten Tag,

aufbauend auf meiner Frage hier (https://support.soscisurvey.de/?qa=22390/seitenkennungen-und-variablen-in-if-befehlen-benutzen) würde ich gerne wissen, ob es auch möglich wäre, nicht nur die Auswahl zu speichern, die als letzte getroffen wurde, sondern auch alle vorherigen.

Um das ganze kurz zusammen zu fassen:
In meinem Skript wird auf einer Seite ein Array randomisiert, das vier Blöcke (weitere Arrays), à 7 Seiten enthält, die auch randomisiert werden. Die Probanden können auf jeder der Seiten die Auswahl "ja" oder "nein" treffen. Meine Frage oben bezog sich darauf, dass ich (auf einer anderen Seite - die Reihenfolgen werden in einer global definierten variable gespeichert) in einer internen Variablen speichern wollte, welche "ja"-Antwort pro Block zeitlich als letzte getätigt wurde (weil die Reihenfolge der Seiten ja durcheinander ist, reicht deren Position im Skript dafür nicht aus). Wenn keine "ja"-Antwort getätigt wurde, dann sollte einfach ein "keiner" in die interne Variable geschrieben werden.

Das Skript, das ich mit der Hilfe des Supports erstellen konnte, sieht folgendermaßen aus:

$fragen = [
  's1GU1' => 'SG01',
  's2GU1' => 'SG02',
  's3GU1' => 'SG03',
  's4GU1' => 'SG16',
  's5GU1' => 'SG04',
  's6GU1' => 'SG21',
  's7GU1' => 'SG22',
  's1GU2' => 'SG05',
  's2GU2' => 'SG06',
  's3GU2' => 'SG07',
  's4GU2' => 'SG08',
  's5GU2' => 'SG09',
  's6GU2' => 'SG25',
  's7GU2' => 'SG23',
  's1GU3' => 'SG10',
  's2GU3' => 'SG11',
  's3GU3' => 'SG17',
  's4GU3' => 'SG18',
  's5GU3' => 'SG19',
  's6GU3' => 'SG26',
  's7GU3' => 'SG27',
  's1GU4' => 'SG12',
  's2GU4' => 'SG13',
  's3GU4' => 'SG20',
  's4GU4' => 'SG14',
  's5GU4' => 'SG15',
  's6GU4' => 'SG28',
  's7GU4' => 'SG24',
 ];

put('IV08_01', -1);
put('IV08_02', -1);
put('IV08_03', -1);
put('IV08_04', -1);

foreach ($Seq_GUNeu as $block => $pages) {
  foreach ($pages as $pos => $pageID) {
    $frage = $fragen[$pageID];
    if (value($frage) == 1) {
      $saveID = id('IV08', $block);
      put($saveID, $pageID);
    }
  }
}


//Speicherung der Codierung der Position für Block 1
if( (value('IV08_01') == 's1GU1')
)  { 
put('IV08_05', 1);
put('IV08_09', 'Distraktor 1');
}
if( (value('IV08_01') == 's2GU1')
)  { 
put('IV08_05', 2);
put('IV08_09', 'Distraktor 2');
}
if( (value('IV08_01') == 's3GU1')
)  { 
put('IV08_05', 3);
put('IV08_09', 'Distraktor 3');
}
if( (value('IV08_01') == 's4GU1')
)  { 
put('IV08_05', 4);
put('IV08_09', 'Distraktor 4');
}
if( (value('IV08_01') == 's5GU1')
)  { 
put('IV08_05', 5);
put('IV08_09', 'Distraktor 5');
}
if( (value('IV08_01') == 's6GU1')
)  { 
put('IV08_05', 6);
put('IV08_09', 'Target 1');
}
if( (value('IV08_01') == 's7GU1')
)  { 
put('IV08_05', 7);
put('IV08_09', 'Target 2');
}
if( (value('IV08_01') == -1)
)  { 
put('IV08_05', -1);
put('IV08_09', 'Keiner');
}

//speicherung der Codierung der Position für Block 2
if( (value('IV08_02') == 's1GU2')
)  { 
put('IV08_06', 1);
put('IV08_10', 'Distraktor 1');
}
if( (value('IV08_02') == 's2GU2')
)  { 
put('IV08_06', 2);
put('IV08_10', 'Distraktor 2');
}
if( (value('IV08_02') == 's3GU2')
)  { 
put('IV08_06', 3);
put('IV08_10', 'Distraktor 3');
}
if( (value('IV08_02') == 's4GU2')
)  { 
put('IV08_06', 4);
put('IV08_10', 'Distraktor 4');
}
if( (value('IV08_02') == 's5GU2')
)  { 
put('IV08_06', 5);
put('IV08_10', 'Distraktor 5');
}
if( (value('IV08_02') == 's6GU2')
)  { 
put('IV08_06', 6);
put('IV08_10', 'Target 1');
}
if( (value('IV08_02') == 's7GU2')
)  { 
put('IV08_06', 7);
put('IV08_10', 'Target 2');
}
if( (value('IV08_02') == -1)
)  { 
put('IV08_06', -1);
put('IV08_10', 'Keiner');
}

//speicherung der Codierung der Position für Block 3
if( (value('IV08_03') == 's1GU1')
)  { 
put('IV08_07', 1);
put('IV08_11', 'Distraktor 1');
}
if( (value('IV08_03') == 's2GU3')
)  { 
put('IV08_07', 2);
put('IV08_11', 'Distraktor 2');
}
if( (value('IV08_03') == 's3GU3')
)  { 
put('IV08_07', 3);
put('IV08_11', 'Distraktor 3');
}
if( (value('IV08_03') == 's4GU3')
)  { 
put('IV08_07', 4);
put('IV08_11', 'Distraktor 4');
}
if( (value('IV08_03') == 's5GU3')
)  { 
put('IV08_07', 5);
put('IV08_11', 'Distraktor 5');
}
if( (value('IV08_03') == 's6GU3')
)  { 
put('IV08_07', 6);
put('IV08_11', 'Target 1');
}
if( (value('IV08_03') == 's7GU3')
)  { 
put('IV08_07', 7);
put('IV08_11', 'Target 2');
}
if( (value('IV08_03') == -1)
)  { 
put('IV08_07', -1);
put('IV08_11', 'Keiner');
}

//speicherung der Codierung der Position für Block 4
if( (value('IV08_04') == 's1GU4')
)  { 
put('IV08_08', 1);
put('IV08_12', 'Distraktor 1');
}
if( (value('IV08_04') == 's2GU4')
)  { 
put('IV08_08', 2);
put('IV08_12', 'Distraktor 2');
}
if( (value('IV08_04') == 's3GU4')
)  { 
put('IV08_08', 3);
put('IV08_12', 'Distraktor 3');
}
if( (value('IV08_04') == 's4GU4')
)  { 
put('IV08_08', 4);
put('IV08_12', 'Distraktor 4');
}
if( (value('IV08_04') == 's5GU4')
)  { 
put('IV08_08', 5);
put('IV08_12', 'Distraktor 5');
}
if( (value('IV08_04') == 's6GU4')
)  { 
put('IV08_08', 6);
put('IV08_12', 'Target 1');
}
if( (value('IV08_04') == 's7GU4')
)  { 
put('IV08_08', 7);
put('IV08_12', 'Target 2');
}
if( (value('IV08_04') == -1)
)  { 
put('IV08_08', -1);
put('IV08_12', 'Keiner');
}
}

Ich brauche für die Auswertung der Daten nun aber auch mögliche "ja"-Auswahlen, die zuvor getroffen wurden. Ein Teilnehmer kann ja nur auf einer der sieben Seiten "ja" sagen, aber auch insgesamt zwei Mal oder sogar auf allen Seiten "ja" ankreuzen. Das würde ich ebenfalls gerne in eine (neue) interne Variable schreiben, und zwar in der Reihenfolge, in der diese "ja"-Auswahlen getätigt wurden. Um das verständlicher zu machen vielleicht ein Beispiel: Wenn die Blöcke nach der Randomisierung folgende Reihenfolge haben:

Block 2
Block 1
Block 4
Block 3

und die Seiten in Block 2 dann z.B. so vorliegen:

S3, S2, S7, S5, S1, S4, S6

könnte der Teilnehmer ja z.B. auf Seite 3, "nein" auswählen, auf Seite 2 ebenfalls. Auf Seite 7 würde er dann "ja" sagen, auf Seite 5 wieder "nein", auf Seite 1 und 4 wieder "ja" und auf Seite 6 wieder "nein"

S3 - nein
S2 - nein
S7 - ja
S5 - nein
S1 - ja
S4 - ja
S6 - nein

Dann würde im Augenblick gespeichert werden, dass Seite 4 als letztes mit "ja" beantwortet wurde. Das Programm würde mir dann die Seitenkennung "S4GU2" (s. Skript) raussuchen und in meine interne Variable eine 4 schreiben. Ich hätte aber gerne, dass es eben auch Seite 1 erfasst und mir als nächstes eine 1 aufschreibt (weil das die vorletzte Antwort war) und danach auch noch die Seite 7 mit einer 7 (weil dies die erste "ja"-Antwort war). Analog soll das mit allen "ja"-Antworten passieren und dann natürlich für alle Blöcke.

Wie muss das Skript dafür angepasst werden?

Ich hoffe ich konnte verständlich machen, was mein Anliegen ist.
Liebe Grüße und vielen Dank im Voraus!

in SoSci Survey (dt.) by s137634 (690 points)

4 Answers

0 votes

und zwar in der Reihenfolge, in der diese "ja"-Auswahlen getätigt wurden

Mein erster Gedanke galt hier eine sinnvollen Datenstruktur.

Ich würde vorschlagen, dass Sie 4 x 7 = 28 interne Variablen anlegen. Nachdem Sie das Ganze "pro Block" haben möchten, bietet es sich an, dass Sie das in 4 Fragen (interne Variablen) à 7 Variablen aufteilen.

In diese Variablen würden Sie dann 1/2 schreiben, entsprechend der Antwort im Fragebogen, aber eben in der Reihenfolge, wie es abgefragt wurde. Das könnte dann so aussehen:

01 02 03 04 05 06 07
  1   2   2   1   2   1   2

Dort wäre es so gewesen, dass beim ersten, vierten und sechsten Item "Ja" ausgewählt wurde. In der anderen Variable wäre die 6 gespeichert worden.

Und dann haben Sie ja diese hübsche Schleife im Code, welche die Blöcke und Fragen in der Reihenfolge durchgeht, in welcher sie im Fragebogen erscheinen:

foreach ($Seq_GUNeu as $block => $pages) {
  foreach ($pages as $pos => $pageID) {
    $frage = $fragen[$pageID];
    if (value($frage) == 1) {
      $saveID = id('IV08', $block);
      put($saveID, $pageID);
    }
  }
}

Unter dem IF müssten Sie nur noch zwei weitere Zeilen ergänzen:

foreach ($Seq_GUNeu as $block => $pages) {
  foreach ($pages as $pos => $pageID) {
    $frage = $fragen[$pageID];
    if (value($frage) == 1) {
      $saveID = id('IV08', $block);
      put($saveID, $pageID);
    }
    $saveID2 = id($intVarID, $pos);
    put($saveID2, value($frage));
  }
}

Dort wird also in die Variable an der entsprechenden Stelle einfach nochmal der Wert aus de Ja/Nein-Auswahl geschrieben. Bevor Sie das testen: So funktioniert es noch nicht, denn wir benötigen noch die Variable $intVarID. Das beschreibt die Frage-Kennung der interne Variablen-Frage, welche zu dem Block gehört.

Und an der Stelle bin ich unsicher. Denn dafür müsste ich wissen, was genau in der Variable $Seq_GUNeu steht. Da ist die Frage, ob wir aus den pages die passende Block-Variable herausfinden können oder ob wir das nochmal separat speichern müssen. Wenn Sie den Code von der Seite mit der Definition von $Seq_GUNeu posten (der steht auch nicht in der "alten" Frage im Support), kann ich mir das nochmal ansehen.

Ergänzung

Sie speichern in drie internen Variablen IV13 ja die Ränge der 4 Blöcke.

$id = id('IV13', $indicesA[$i] + 1);
...
put($id, $i + 1);

Diese müssen wir für die korrekte Zuordnung wieder zurückkodieren.

$blocks = array_flip(array_values(valueList('IV13')));

Das sind ein paar verschachtelte Funktionen. Also kurz zur Erklärung: valueList() holt eine Liste der Ränge, array_values() erstzt die Schlüssel (erstmal die Variablennamen) durch die Indizes 0..3. Und array_flip() tauscht Schlüssel und Werte. Jetzt haben wir also eine Liste: Rang -> Block-Index (=Block-Nummer - 1).

Dann wissen wir jetzt auch, welcher Block z.B. auf dem ersten Rank anezeigt wird. Das können wir nutzen.

$blocks = array_flip(array_values(valueList('IV13')));
foreach ($Seq_GUNeu as $block => $pages) {
  $blockNum = $blocks[$block + 1] + 1;
  foreach ($pages as $pos => $pageID) {
    $frage = $fragen[$pageID];
    if (value($frage) == 1) {
      $saveID = id('IV08', $block);
      put($saveID, $pageID);
    }
    $saveID2 = id('IV99', $blockNum, $pos);
    put($saveID2, value($frage));
  }
}

So, Sie sehen, wie aus $blocks nun die Variable $blockNum ermittelt wird - und diese wird dann weiter unten verwendet, um eine interne Variable zu kodieren:

  $saveID2 = id('IX', $blockNum, $pos);

Das IX müssen Sie natürlich durch die Rubrik-Kennung ersetzen, wo die 4 neuen internen Variablen stehen. Sie können da natürlich auch rechnen, wenn Ihre neuen Variablen z.B: die Kennungen IV20 bis IV23 haben:

  $saveID2 = id('IV', $blockNum + 19, $pos);
by SoSci Survey (223k points)
edited by SoSci Survey
Vielen Dank! Ich habe in einer weiteren Antwort geantwortet.
0 votes

Vielen Dank für die schnelle Antwort!
Ich habe Ihnen den passenden Ausschnitt des Skripts hier unten gepostet. Ich habe bewusst den ganzen Abschnitt genommen, falls sie den für das Verständnis brauchen. Aber letzten Endes macht das Skript kurz vor dem Ende (ab "//Speichern der Reihenfolge von Targets und Distraktoren in einer internen Variable") vier Mal das Selbe, bevor alles in $Seq_GUNeu gespeichert wird.

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


// 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');
by s137634 (690 points)
Vielen Dank für Ihre schnelle Antwort. Ich habe das ergänzt.

Irritiert bin ich allerdings darüber, dass die Variablen IV36_01 - IV 39_07 nicht existieren sollen. ich habe sie nämlich alle angelegt und finde sie auch links oben in der Leiste.

Zudem wird weiterhin ein Fehler in diesem Abschnitt des Codes gemeldet:
Fehler im Fragebogen: Undefined offset: 5

050 $blockNum = $blocks[$block + 1] + 1;
> Irritiert bin ich allerdings darüber, dass die Variablen IV36_01 - IV 39_07 nicht existieren sollen.

Stehen sie auch in der "Variable-Liste"?

> Fehler im Fragebogen: Undefined offset: 5

Wenn Sie über oder unter der fraglichen Zeile folgende Zeile ergänzen, was sagt denn dann die Debug-Information?

debug($blocks);
Guten Tag,

nein, bisher stehen die Variablen nicht in der Liste. Wie genau muss ich diese denn dort einpflegen?

Und ich habe unter der entsprechenden Zeile den Debug-Befehl eingefügt. Folgendes wird auf der Seite in einem gelben Kästchen angezeigt:

Debug-Information für $blocks:
4 0, 3 1, 2 2, 1 3, 7
(wobei die 4, 3, 2 und 1 in klein über der 0, 1, 2 und 3 stehen)
Danke für die ausführlichen Debug-Infos. Ich brauche im Moment tatsächlich nur die Information zu $blocks - den Rest habe ich daher entfernt.

Steht da wirklich noch eine 7 dahinter?

Die Ziffern die klein oben stehen, sind die Indizes des Arrays. Die Variable $blocks kommt ja hierher:

$blocks = array_flip(array_values(valueList('IV13')));

Heißt, da wurden die Werte aus IV13 genommen und dann Indizes und Werte vertauscht. Korrekt muss es dann aber heißen:

$blockNum = $blocks[$block] + 1;

Also ein +1 weniger. Dann sollten da Werte von [0..3]+1 = [1..4] herauskommen. Diese werden dann weiter unten in Variablen-Namen umgerechnet:

id('IV', $blockNum + 35, $pos + 1);

In dem Fall wäre das dann IV36 bis IV39.

> nein, bisher stehen die Variablen nicht in der Liste.

Prüfen Sie bitte, dass Sie 4 interne Variablen haben (z.B. mit den Kennung IV36 bis IV39) und dass jede dieser Fragen die passende Anzahl von 7 Items (Variabeln) enthält, um die Auswahlentscheidungen abzuspeichern.
Ich habe noch einmal als "Antwort" kommentiert, weil ich Ihnen dort Screenshots bereitstellen kann.
0 votes

Vielen dank für Ihre rasche Rückmeldung!
Ich habe die Änderung übernommen. Die Debug-Option wird nun wie folgt angezeigt:
(die 7 steht tatsächlich dort)


Und zu den internen Variablen: Ja, sie sind angelegt. Auch hier noch einmal ein Screenshot dazu, wie sie links oben in der Leiste erscheinen:

Deswegen bin ich weiterhin verwirrt, warum das Programm sie nicht erkennt. Muss ich die Variablen irgendwo im Code noch erwähnen?

by s137634 (690 points)
Ich habe drei Testdurchgänge gemacht:

Beim ersten passten die Variablen mit der Reihenfolge in der Studie zusammen:
3, 4, 1, 2 wurden in IV40 - IV43 als 3, 4, 1, 2 angezeigt. In IV13_01 - 13_04 ebenfalls 3, 4, 1, 2

Anders sah es im zweiten Durchgang aus. Da war die Reihen folge in der Studie 3, 2, 4, 1 aber sowohl in IV40 - IV43 und IV 13_01 - IV13_04 4, 2, 1, 3

Im dritten Durchgang zeigte sich das ebenso: Die Reihenfolge in der Studie war 1, 4, 2, 3 aber in allen Variablen als 1, 3, 4, 2 gespeichert
Sie haben in der Variable die Ränge (!) der Blöcke gespeichert:

1, 4, 2, 3 bedeutet:

Block 1 wurde auf Position 1 gezeigt
Block 2 wurde auf Position 3 gezeigt
Block 3 wurde auf Position 4 gezeigt
Block 4 wurde auf Position 2 gezeigt

Daher die Daten in Ihrem Datensatz.

Aber ich dachte eigentlich, dass in IV40 ff. die Abfolgen innerhalb der Blöcke gespeichert würden bzw. die Frage-Kennungen (und zwar nur dann wenn die positive Auswahl mit Code 1 gewähl wurde):

    $saveID3 = id('IV', $blockNum + 39, $pos + 1);
    if (value($frage) > 0) {
      put($saveID3, $frage);
    }

Und in IV13 dachte ich, dass die Reihenfolge der Blöcke liegt. Sie sehen, ich mache mir gerade Sorgen, dass Sie Ihre Variablen überschreiben und am Ende ein großes Chaos in den Daten bekommen.
Ja, das könnte vielleicht passieren. Da ich viele Berechnungen zur Auswertung bereits in Sosci Survey durchführe gibt es eine ganze Reihe an Variablen und Code. Wie kann ich das Problem denn umgehen?

Sollte neben IV13 eine weitere variable angelegt werden, die die Reihenfolge speichert, so wie ich sie in IV40 ff. brauche? in IV40 ff. soll nämlich die Reihenfolge und nicht die Rangfolge gespeichert werden. Wobei wenn es dadurch sehr aufwändig wird könnte ich mit meinem Auswertungsprogramm da vermutlich auch eine Lösung finden.
> Wie kann ich das Problem denn umgehen?

Vielleicht wäre es eine gute Idee, die internen Variablen-Fragen für unterschiedliche Einsatzbereiche in unterschiedliche (neue) Rubriken zu verschieben. Dann kann man ziemlich sicher ausschließen, dass eine Variable doppelt verwendet wird.

> Sollte neben IV13 eine weitere variable angelegt werden, die die Reihenfolge speichert, so wie ich sie in IV40 ff. brauche?

Das kann man schon machen. Das würde ich dann aber an derselben Stelle erledigen, wo auch IV13 beschrieben wird. Auwfändiger wird es nicht - man muss halt nur wissen, was man in der Auswertung benötigt.
Guten Tag,

da ich für eine weitere Auswertung doch auch die Reihenfolge brauche, habe ich noch einmal eine Antwort zu dieser Frage gepostet, weil es bei der Etablierung noch Probleme gibt. Wenn das Skript dort funktioniert würde ich in dem bisher erarbeiteten Skript einfach die Variable IV13 gegen IV52 austauschen, dann müsste das Programm auf die dort vorliegende Reihenfolge zugreifen, oder?
0 votes

Nach längerem Herumprobieren ist es doch am einfachsten, die Reihenfolge zu speichern. In der internen Variable 13 wird bisher die Position gespeichert, welche ich an anderer Stelle brauche. deswegen wollte ich die Reihenfolge in die zusätzliche Variable IV52 speichern. Dort, wo die Positionen im Code geshuffelt werden habe ich den Code zur Speicherung für Reihenfolgen ergänzt. Allerdings hat das Programm damit Probleme. Es wird folgende Fehlermeldung ausgegeben:

In der Funktion setPageOrder() wurde ein ungültiger Parameter vom Typ NULL angegeben. Als Parameter sind entweder Strings (Texte) erlaubt oder Arrays, die ausschließlich Strings enthalten.
Fehler im Fragebogen (Seite 12)
Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: Undefined offset: 4
Zeile: 684

PHP-Code

681
682 put($id, $i + 1);
683
684 $Seq_GUMix[$i] = $Seq_GU_order[$indicesA[$i]];
685 }
686
687 setPageOrder($Seq_GUMix[0], 'S2', $Seq_GUMix[1], 'S3', $Seq_GUMix[2], 'S4', $Seq_GUMix[3], 'GK' );
Fehler im Fragebogen: Undefined index:
Zeile: 684

PHP-Code

681
682 put($id, $i + 1);
683
684 $Seq_GUMix[$i] = $Seq_GU_order[$indicesA[$i]];
685 }
686
687 setPageOrder($Seq_GUMix[0], 'S2', $Seq_GUMix[1], 'S3', $Seq_GUMix[2], 'S4', $Seq_GUMix[3], 'GK' );
Fehler im Fragebogen: Undefined offset: 0
Zeile: 687

PHP-Code

684 $Seq_GUMix[$i] = $Seq_GU_order[$indicesA[$i]];
685 }
686
687 setPageOrder($Seq_GUMix[0], 'S2', $Seq_GUMix[1], 'S3', $Seq_GUMix[2], 'S4', $Seq_GUMix[3], 'GK' );
688 }
689
690
Fehler im Fragebogen: Undefined offset: 1
Zeile: 687

PHP-Code

684 $Seq_GUMix[$i] = $Seq_GU_order[$indicesA[$i]];
685 }
686
687 setPageOrder($Seq_GUMix[0], 'S2', $Seq_GUMix[1], 'S3', $Seq_GUMix[2], 'S4', $Seq_GUMix[3], 'GK' );
688 }
689
690
Fehler im Fragebogen: Undefined offset: 2
Zeile: 687

PHP-Code

684 $Seq_GUMix[$i] = $Seq_GU_order[$indicesA[$i]];
685 }
686
687 setPageOrder($Seq_GUMix[0], 'S2', $Seq_GUMix[1], 'S3', $Seq_GUMix[2], 'S4', $Seq_GUMix[3], 'GK' );
688 }
689
690
Fehler im Fragebogen: Undefined offset: 3
Zeile: 687

PHP-Code

684 $Seq_GUMix[$i] = $Seq_GU_order[$indicesA[$i]];
685 }
686
687 setPageOrder($Seq_GUMix[0], 'S2', $Seq_GUMix[1], 'S3', $Seq_GUMix[2], 'S4', $Seq_GUMix[3], 'GK' );
688 }
689
690

Und der Code sieht nun wie folgt aus:
(Der von mir ergänzte Teil ist fast ganz unten über dem Debug-Block zu finden. Ohne ihn funktionierte mein Code, aber anscheinend interferiert er mit dem bisherigen?)

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

//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]);
}

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' );
}
by s137634 (690 points)
Ich habe vermutlich gefunden, wo das Problem mit der Klammer war:

// 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);

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

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

} // <- Diese Klammer habe ich gelöscht, nun gibt es keine Fehlermeldung mehr

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

Nun wird mir allerdings folgendes angezeigt:

Hinweis (Seite 12)
Debug-Information für $Seq_GUMix:
Array (ohne Elemente)
Fehler im Fragebogen (Seite 12)
In der Funktion setPageOrder() wurde ein ungültiger Parameter vom Typ NULL angegeben. Als Parameter sind entweder Strings (Texte) erlaubt oder Arrays, die ausschließlich Strings enthalten.
Fehler im Fragebogen (Seite 12)
Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: Undefined offset: 4
Zeile: 359

PHP-Code

356
357   put($id, $i + 1);
358   
359   $Seq_GUMix[$i] = $Seq_GU_order[$indicesA[$i]];
360
361
362 setPageOrder($Seq_GUMix[0], 'S2', $Seq_GUMix[1], 'S3', $Seq_GUMix[2], 'S4', $Seq_GUMix[3], 'GK' );
Fehler im Fragebogen: Undefined index:
Zeile: 359

PHP-Code

356
357   put($id, $i + 1);
358   
359   $Seq_GUMix[$i] = $Seq_GU_order[$indicesA[$i]];
360
361
362 setPageOrder($Seq_GUMix[0], 'S2', $Seq_GUMix[1], 'S3', $Seq_GUMix[2], 'S4', $Seq_GUMix[3], 'GK' );
Fehler im Fragebogen: Undefined offset: 0
Zeile: 362

PHP-Code

359   $Seq_GUMix[$i] = $Seq_GU_order[$indicesA[$i]];
360
361
362 setPageOrder($Seq_GUMix[0], 'S2', $Seq_GUMix[1], 'S3', $Seq_GUMix[2], 'S4', $Seq_GUMix[3], 'GK' );
363 }
364
365
Fehler im Fragebogen: Undefined offset: 1
Zeile: 362

PHP-Code

359   $Seq_GUMix[$i] = $Seq_GU_order[$indicesA[$i]];
360
361
362 setPageOrder($Seq_GUMix[0], 'S2', $Seq_GUMix[1], 'S3', $Seq_GUMix[2], 'S4', $Seq_GUMix[3], 'GK' );
363 }
364
365
Fehler im Fragebogen: Undefined offset: 2
Zeile: 362

PHP-Code

359   $Seq_GUMix[$i] = $Seq_GU_order[$indicesA[$i]];
360
361
362 setPageOrder($Seq_GUMix[0], 'S2', $Seq_GUMix[1], 'S3', $Seq_GUMix[2], 'S4', $Seq_GUMix[3], 'GK' );
363 }
364
365
Fehler im Fragebogen: Undefined offset: 3
Zeile: 362

PHP-Code

359   $Seq_GUMix[$i] = $Seq_GU_order[$indicesA[$i]];
360
361
362 setPageOrder($Seq_GUMix[0], 'S2', $Seq_GUMix[1], 'S3', $Seq_GUMix[2], 'S4', $Seq_GUMix[3], 'GK' );
363 }
364
365
Sie können den Code hier mal richtig einrücken lassen, dann sollte es übersichtlicher werden: http://beautifytools.com/php-beautifier.php
> Diese Klammer habe ich gelöscht, nun gibt es keine Fehlermeldung mehr

Das war m.E. die falsche - es macht nicht viel Sinn, setPageOrder() in einer Schleife mehrfach aufzurufen. Diese Funktion sollte definitiv nur einmal aufgerufen werden. Und dann natürlich mit den richtigen Werten, sonst kommt eine Fehlermeldung wie die beschriebene ;)
Vielen Dank für den Link!
Ich habe den Code nun so abgeändert, dass es nur noch ein einziges setPageOrder() am Ende außerhalb der Schleifen gibt. Ich habe die vorherige Klammer zudem wieder ergänzt. Das ganze sieht nun so aus:

else {

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

//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]);
}

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

(hier folgen dann fünf weitere, sehr ähnliche Blöcke)

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

;}


Allerdings ist auch das problematisch:

Hinweis (Seite 12)
Debug-Information für $Seq_GUMix:
Array (ohne Elemente)
Fehler im Fragebogen (Seite 12)
In der Funktion setPageOrder() wurde ein ungültiger Parameter vom Typ NULL angegeben. Als Parameter sind entweder Strings (Texte) erlaubt oder Arrays, die ausschließlich Strings enthalten.
Fehler im Fragebogen (Seite 12)
Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: Undefined offset: 4
Zeile: 820

PHP-Code

817
818   put($id, $i + 1);
819   
820   $Seq_GUMix[$i] = $Seq_GU_order[$indicesA[$i]];
821
822 }
823
Fehler im Fragebogen: Undefined index:
Zeile: 820

PHP-Code

817
818   put($id, $i + 1);
819   
820   $Seq_GUMix[$i] = $Seq_GU_order[$indicesA[$i]];
821
822 }
823
Fehler im Fragebogen: Undefined offset: 0
Zeile: 975

PHP-Code

972   $Seq_GUMix[$i] = $Seq_GU_order[$indicesA[$i]];
973 }
974
975 setPageOrder($Seq_GUMix[0], 'S2', $Seq_GUMix[1], 'S3', $Seq_GUMix[2], 'S4', $Seq_GUMix[3], 'GK' );
976
977 ;}
978 return 'ok';
Fehler im Fragebogen: Undefined offset: 1
Zeile: 975

PHP-Code

972   $Seq_GUMix[$i] = $Seq_GU_order[$indicesA[$i]];
973 }
974
975 setPageOrder($Seq_GUMix[0], 'S2', $Seq_GUMix[1], 'S3', $Seq_GUMix[2], 'S4', $Seq_GUMix[3], 'GK' );
976
977 ;}
978 return 'ok';
Fehler im Fragebogen: Undefined offset: 2
Zeile: 975

PHP-Code

972   $Seq_GUMix[$i] = $Seq_GU_order[$indicesA[$i]];
973 }
974
975 setPageOrder($Seq_GUMix[0], 'S2', $Seq_GUMix[1], 'S3', $Seq_GUMix[2], 'S4', $Seq_GUMix[3], 'GK' );
976
977 ;}
978 return 'ok';
Fehler im Fragebogen: Undefined offset: 3
Zeile: 975

PHP-Code

972   $Seq_GUMix[$i] = $Seq_GU_order[$indicesA[$i]];
973 }
974
975 setPageOrder($Seq_GUMix[0], 'S2', $Seq_GUMix[1], 'S3', $Seq_GUMix[2], 'S4', $Seq_GUMix[3], 'GK' );
976
977 ;}
978 return 'ok';


Generell hat das Programm ja so lange funktioniert, bis ich den Block

//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]);
}

ergänzt habe. Interferiert dieser auf irgendeine Weise mit dem anderen Skript?
Reihenfolge und Position einer Frage speichern
...