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,

für meine Studie nutze ich eine Randomisierung mittels des "Shuffle"-Befehls. Dabei werden vier Arrays in ihrer Reihenfolge gemischt. Ich benötige die neu gemischte Reihenfolge für die Datenauswertung und möchte sie deswegen in eine interne Variable speichern. Dafür habe ich mich an folgender Seite orientiert:

https://www.soscisurvey.de/help/doku.php/de:create:functions:put#beispielrandomisierung_i
unter "Beispiel: Randomisierung 1"

Das Problem ist, dass der Put() Befehl nur für die Reihenfolge der Elemente innerhalb eines Arrays funktioniert. Da ich aber die vier Arrays für die Randomisierung mit "Shuffle" in ein weiteres Array packe, kann ihre Reihenfolge nicht in eine interne Variable geschrieben werden.
Gibt es eine einfache Methode um Drumherum zu arbeiten? Also entweder einen entsprechenden Befehl, oder die Möglichkeit, die vier Arrays zu nummerieren und mit put() nur diese Nummern auszulesen?

Liebe Grüße und vielen Dank im Voraus!

in SoSci Survey (dt.) by s137634 (660 points)
Ich gehe davon aus, dass Sie nicht einfach nur 4 Arrays haben, für die Sie denselben PHP-Code einfach 4-mal wiederholen könnten?

Bitte ergänzen Sie doch einmal Ihren PHP-Code oder zumindest eine genaue Beschreibung, wie Ihr Array oder Ihre Arrays aufgebaut sind. Dann kann ich gezielt darauf antworten.
Folgend ist der komplette Code. Vermutlich etwas umständlich formuliert, aber er tut was er soll. Es werden vier Arrays mit jeweils sechs Seiten in einem weiteren "über"-Array definiert und nacheinander herausgenommen. In jedem der vier Arrays wird zunächst die Reihenfolge der Seiten durch "shuffle" randomisiert und deren Reihenfolge in interne Variablen gespeichert. Dann werden die vier Arrays zurück in ein "über"-Array gepackt und durch "Shuffle" die Reihenfolge der Arrays randomisiert, bevor sie nacheinander wieder herausgenommen werden damit die folgende Seitenreihenfolge unten mit "setPageOrder" eingestellt werden kann. Ich würde auch gerne die Reihenfolge der Arrays im "über"-Array speichern, nachdem sie mit "shuffle" gemischt wurden.

$Showup = array (
'Showup11' => array('s1GU1', 's2GU1', 's3GU1',
                 's4GU1', 's5GU1', 's7GU1'),

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

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

'Showup41' => array('s1GU4', 's2GU4', 's3GU4',
                 's4GU4', 's5GU4', 's6GU4')
);


// Den ersten Block aus dem Array $Showup herausnehmen, etc.
$Showup1 = array_shift($Showup);
$Showup2 = array_shift($Showup);
$Showup3 = array_shift($Showup);
$Showup4 = array_shift($Showup);


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

$indices1 = array_keys($Showup1);
shuffle($indices1);
// Nun die Ränge speichern - und die neue Abfolge der Seiten in $Showup_order speichern
$Showup_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
  $Showup_order1[$i] = $Showup1[$indices1[$i]];
}

$indices2 = array_keys($Showup2);
shuffle($indices2);
// Nun die Ränge speichern - und die neue Abfolge der Seiten in $Showup_order speichern
$Showup_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
  $Showup_order2[$i] = $Showup2[$indices2[$i]];
}

$indices3 = array_keys($Showup3);
shuffle($indices3);
// Nun die Ränge speichern - und die neue Abfolge der Seiten in $Showup_order speichern
$Showup_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
  $Showup_order3[$i] = $Showup3[$indices3[$i]];
}

$indices4 = array_keys($Showup4);
shuffle($indices4);
// Nun die Ränge speichern - und die neue Abfolge der Seiten in $Showup_order speichern
$Showup_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
  $Showup_order4[$i] = $Showup4[$indices4[$i]];
}


$Showup_order = array (
 '1_Showup' => $Showup_order1,
 '2_Showup' => $Showup_order2,
 '3_Showup' => $Showup_order3,
 '4_Showup' => $Showup_order4
);

//Reihenfolge der Blöcke zufällig mischen
shuffle($Showup_order);

// Den ersten Block aus dem Array $Showup herausnehmen, etc.
$Showup_1 = array_shift($Showup_order);
$Showup_2 = array_shift($Showup_order);
$Showup_3 = array_shift($Showup_order);
$Showup_4 = array_shift($Showup_order);

// Jetzt das Ergebnis noch als Seitenabfolge festlegen
//Blöcke und dazwischenliegende "Start"-Seiten anordnen
setPageOrder($Showup_1, 'S2', $Showup_2, 'S3', $Showup_3, 'S4', $Showup_4, 'GK' );
// S2 - S4 sind die Startseiten bevor eine Gegenüberstellung losgeht
}

4 Answers

0 votes

Danke für die Ergänzung des PHP-Codes.

Wenn ich Sie korrekt verstehe, klappt es schon ganz gut, dass Sie die Reihenfolge der 4 einzelnen Arrays speichern?

Und was jetzt noch fehlt ist die Abfolge, in welcher Reihenfolge die 4 Arrays jetzt angezeigt werden? Also quasi das ...

shuffle($Showup_order);

Kein Problem... Sie können hier genauso vorgehen wie oben schon.

// Das ist Ihr Code
$Showup_order = array (
 '1_Showup' => $Showup_order1,
 '2_Showup' => $Showup_order2,
 '3_Showup' => $Showup_order3,
 '4_Showup' => $Showup_order4
);
// Die Schlüssel mischen, nicht das Array selbst
$indicesA = array_keys($Showup_order);
shuffle($indicesA);

// Jetzt wieder Reihenfolge speichern und ein gemischtes Array erzeugen
$ShowupMix = [];
for ($i=0; $i<count($indicesA); $i++) {
  // Rang speichern
  $id = id('IV06', $indicesA[$i] + 1);
  put($id, $i + 1);
  // Teil-Array speichern
  $ShowupMix[$i] = $Showup_order[$indicesA[$i]];
}

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

Was es in Ihrem Code mit dem array_shift() auf sich hat, kann ich nicht ganz nachvollziehen. Für mich sieht es so aus, dass Sie damit eine bzw. zwei zufällige Seiten pro Block weglassen. Aber das überlasse ich Ihnen :)

by SoSci Survey (199k points)
edited by SoSci Survey
siehe   unten
0 votes

Vielen Dank für die schnelle Antwort!
Ich habe Ihren Code übernommen und etwas angepasst (IV06 ist bereits woanders vergeben. Deswegen ist hier IV13 implementiert). Das sieht nun wie folgt aus:

$Showup = array (
'Showup11' => array('s1GU1', 's2GU1', 's3GU1',

             's4GU1', 's5GU1', 's6GU1'),

'Showup21' => array('s1GU2', 's2GU2', 's3GU2',

             's4GU2', 's5GU2', 's6GU2'),

'Showup31' => array('s1GU3', 's2GU3', 's3GU3',

             's4GU3', 's5GU3', 's7GU3'),

'Showup41' => array('s1GU4', 's2GU4', 's3GU4',

             's4GU4', 's5GU4', 's7GU4')

//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 $Showup herausnehmen, etc.
$Showup1 = array_shift($Showup);
$Showup2 = array_shift($Showup);
$Showup3 = array_shift($Showup);
$Showup4 = array_shift($Showup);

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

$indices1 = array_keys($Showup1);
shuffle($indices1);
// Nun die Ränge speichern - und die neue Abfolge der Seiten in $Showup_order speichern
$Showup_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
$Showup_order1[$i] = $Showup1[$indices1[$i]];
}

$indices2 = array_keys($Showup2);
shuffle($indices2);
// Nun die Ränge speichern - und die neue Abfolge der Seiten in $Showup_order speichern
$Showup_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
$Showup_order2[$i] = $Showup2[$indices2[$i]];
}

$indices3 = array_keys($Showup3);
shuffle($indices3);
// Nun die Ränge speichern - und die neue Abfolge der Seiten in $Showup_order speichern
$Showup_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
$Showup_order3[$i] = $Showup3[$indices3[$i]];
}

$indices4 = array_keys($Showup4);
shuffle($indices4);
// Nun die Ränge speichern - und die neue Abfolge der Seiten in $Showup_order speichern
$Showup_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
$Showup_order4[$i] = $Showup4[$indices4[$i]];
}

$Showup_order = array (
'1_Showup' => $Showup_order1,
'2_Showup' => $Showup_order2,
'3_Showup' => $Showup_order3,
'4_Showup' => $Showup_order4
);

// Die Schlüssel mischen, nicht das Array selbst
$indicesA = array_keys($Showup_order);
shuffle($aKeys);

// Jetzt wieder Reihenfolge speichern und ein gemischtes Array erzeugen
$ShowupMix = [];
for ($i=0; $i<count($indicesA); $i++) {
// Rang speichern
$id = id('IV13', $indicesA[$i] + 1);
put($id, $i + 1);
// Teil-Array speichern
$ShowupMix[$i] = $Showup_order[$indicesA[$i]];
}

setPageOrder($ShowupMix[0], 'S2', $ShowupMix1, 'S3', $ShowupMix[3], 'S4', $ShowupMix[4], 'GK' );

}

Es werden mir allerdings folgende Fehlermeldungen ausgegeben:
"Für die Funktion put() wurde anstatt einer Frage- oder Item-Kennung ein Parameter vom Typ NULL angegeben"

"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: shuffle() expects parameter 1 to be array, null given"

by s137634 (660 points)
Ja, es müsste shuffle($indicesA) heißen, nicht shuffle($aKeys) - ich ändere das oben gleich noch.
Bitte verwenden Sie beim Schreiben hier im Support den Knopf {}, um Code als solchen zu formatieren. Danke.
Vielen Dank dafür! Ich habe das ebenfalls angepasst und den Code von Ihnen oben übernommen. Leider funktioniert es noch immer nicht. Weiterhin gibt es die folgenden Fehlermeldungen:
"Für die Funktion put() wurde anstatt einer Frage- oder Item-Kennung ein Parameter vom Typ NULL angegeben:"
und
"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."

Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: A non well formed numeric value encountered
Zeile: 259

PHP-Code

256 $ShowupMix = [];
257 for ($i=0; $i<count($indicesA); $i++) {
258   
259   $id = id('IV06', $indicesA[$i] + 1);
260   put($id, $i + 1);
261   
262   $ShowupMix[$i] = $Showup_order[$indicesA[$i]];

Fehler im Fragebogen: Undefined offset: 4
Zeile: 264

PHP-Code

261   
262   $ShowupMix[$i] = $Showup_order[$indicesA[$i]];
263 }
264 setPageOrder($ShowupMix[0], 'S2', $ShowupMix[1], 'S3', $ShowupMix[3], 'S4', $ShowupMix[4], 'GK' );
265 }
266
267

Falls Ihnen das weiterhilft: Der Code von oben ist nur ein Ausschnitt. Es gibt sechs Bedingungen, in denen er jeweils (nur mit anderen Seiten innerhalb des Arrays) angewandt wird. D.h. der Textblock oben kommt auch sechs mal insgesamt vor.
Bitte fügen Sie zwischen dem $id= und dem put() folgenden PHP-Code ein und berichten Sie kurz, was die Debug-Information anzeigt:

$id = id('IV06', $indicesA[$i] + 1);
debug($i)
debug($indicesA);
debug($id);
put($id, $i + 1);
siehe unten.
0 votes

Ich habe Ihren Code jetzt wie folgt eingefügt:

$Showup = array (
'Showup11' => array('s1GU1', 's2GU1', 's3GU1', 
             's4GU1', 's5GU1', 's7GU1'),
'Showup21' => array('s1GU2', 's2GU2', 's3GU2', 
             's4GU2', 's5GU2', 's7GU2'),
'Showup31' => array('s1GU3', 's2GU3', 's3GU3', 
             's4GU3', 's5GU3', 's6GU3'),
'Showup41' => 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 $Showup herausnehmen, etc.
$Showup1 = array_shift($Showup);
$Showup2 = array_shift($Showup);
$Showup3 = array_shift($Showup);
$Showup4 = array_shift($Showup);

//Speichern der Reihenfolge von Targets und Distraktoren in einer internen Variable
$indices1 = array_keys($Showup1);
shuffle($indices1);
registerVariable('indices1');

// Nun die Ränge speichern - und die neue Abfolge der Seiten in $Showup_order speichern
$Showup_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
  $Showup_order1[$i] = $Showup1[$indices1[$i]];
}

$indices2 = array_keys($Showup2); 
shuffle($indices2);
registerVariable('indices2');
    // Nun die Ränge speichern - und die neue Abfolge der Seiten in $Showup_order speichern
$Showup_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
  $Showup_order2[$i] = $Showup2[$indices2[$i]];
}

$indices3 = array_keys($Showup3);
shuffle($indices3);
registerVariable('indices3');
// Nun die Ränge speichern - und die neue Abfolge der Seiten in $Showup_order speichern
$Showup_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
  $Showup_order3[$i] = $Showup3[$indices3[$i]];
}

$indices4 = array_keys($Showup4);
shuffle($indices4);
registerVariable('indices4');
// Nun die Ränge speichern - und die neue Abfolge der Seiten in $Showup_order speichern
$Showup_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
  $Showup_order4[$i] = $Showup4[$indices4[$i]];
}

$Showup_order = array (
 '1_Showup' => $Showup_order1,
 '2_Showup' => $Showup_order2,
 '3_Showup' => $Showup_order3,
 '4_Showup' => $Showup_order4
);

// Die Schlüssel mischen, nicht das Array selbst
$indicesA = array_keys($Showup_order);
shuffle($indicesA);

// Jetzt wieder Reihenfolge speichern und ein gemischtes Array erzeugen
$ShowupMix = [];
for ($i=0; $i<count($indicesA); $i++) {
  // Rang speichern
  $id = id('IV06', $indicesA[$i] + 1);

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

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

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

(ich habe die erste und letzte Zeile weggenommen, weil sie sich sonst gedoppelt hätten. Ich hoffe das war richtig so - und gibt es eine effiziente Art, den Code mithilfe von {} einzufügen? Ich muss jedes Mal Zeile für Zeile einzeln hinein kopieren, damit das passend dargestellt wird. Das ist leider sehr zeitaufwendig und fehleranfällig)

Folgende Fehlermeldung wird mir ausgegeben:

und die Debug-Information zeigt mir das hier an:

by s137634 (660 points)
Pardon ich habe hinter der ersten debug()-Zeile das Semikolon (;) vergessen. Würde Sie das bitte noch ergänzen? Danach sollten wir mehr sehen.

> gibt es eine effiziente Art, den Code mithilfe von {} einzufügen?

Ja, bitte fügen Sie den PHP-Code hier im Online-Support einfach ein, markieren Sie den kompletten Code und klicken Sie dann auf den Knopf {}.
Jetzt passieren folgende Dinge:

[Information]    Interview Nummer 1834 wird fortgesetzt
[Information]    Der Fragebogen A_Videolaenge10072022 im Projekt test196703 wird verwendet
[Information]    Die Verweildauer auf Seite 11 war 1 Sekunden
[Verarbeitung]    Lese Antworten von Seite 11
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Erstelle Seite 12 in Fragebogen A_Videolaenge10072022
[Inhalt]    Zeige Text GU1 starten
[Information]    value("RA01") = 7
[Information]    value("RA01") = 7
[Information]    value("RA01") = 7
[Information]    value("RA01") = 7
[Information]    value("RA02") = 4
[Information]    value("RA02") = 4
[Information]    value("RA02") = 4
[Information]    value("RA02") = 4
[Information]    Die interne Variable IV01_01 wird mit dem Wert 1 belegt.
[Information]    Die interne Variable IV01_04 wird mit dem Wert 2 belegt.
[Information]    Die interne Variable IV01_03 wird mit dem Wert 3 belegt.
[Information]    Die interne Variable IV01_02 wird mit dem Wert 4 belegt.
[Information]    Die interne Variable IV01_06 wird mit dem Wert 5 belegt.
[Information]    Die interne Variable IV01_05 wird mit dem Wert 6 belegt.
[Information]    Die interne Variable IV03_03 wird mit dem Wert 1 belegt.
[Information]    Die interne Variable IV03_05 wird mit dem Wert 2 belegt.
[Information]    Die interne Variable IV03_01 wird mit dem Wert 3 belegt.
[Information]    Die interne Variable IV03_02 wird mit dem Wert 4 belegt.
[Information]    Die interne Variable IV03_04 wird mit dem Wert 5 belegt.
[Information]    Die interne Variable IV03_06 wird mit dem Wert 6 belegt.
[Information]    Die interne Variable IV04_01 wird mit dem Wert 1 belegt.
[Information]    Die interne Variable IV04_05 wird mit dem Wert 2 belegt.
[Information]    Die interne Variable IV04_03 wird mit dem Wert 3 belegt.
[Information]    Die interne Variable IV04_04 wird mit dem Wert 4 belegt.
[Information]    Die interne Variable IV04_02 wird mit dem Wert 5 belegt.
[Information]    Die interne Variable IV04_06 wird mit dem Wert 6 belegt.
[Information]    Die interne Variable IV05_04 wird mit dem Wert 1 belegt.
[Information]    Die interne Variable IV05_06 wird mit dem Wert 2 belegt.
[Information]    Die interne Variable IV05_05 wird mit dem Wert 3 belegt.
[Information]    Die interne Variable IV05_02 wird mit dem Wert 4 belegt.
[Information]    Die interne Variable IV05_01 wird mit dem Wert 5 belegt.
[Information]    Die interne Variable IV05_03 wird mit dem Wert 6 belegt.
debug()    Inhalt: $i = 0 (integer)
debug()    Inhalt: 04_Showup, 11_Showup, 23_Showup, 32_Showup
debug()    Inhalt: Keine Daten (null)
debug()    Inhalt: $i = 1 (integer)
debug()    Inhalt: 04_Showup, 11_Showup, 23_Showup, 32_Showup
debug()    Inhalt: Keine Daten (null)
debug()    Inhalt: $i = 2 (integer)
debug()    Inhalt: 04_Showup, 11_Showup, 23_Showup, 32_Showup
debug()    Inhalt: Keine Daten (null)
debug()    Inhalt: $i = 3 (integer)
debug()    Inhalt: 04_Showup, 11_Showup, 23_Showup, 32_Showup
debug()    Inhalt: Keine Daten (null)
[Information]    Folgende Platzhalter sind vorbereitet:
%Bedingung% = (Text) sl_S_s1 (serial lineup, sho...
%Targetabsent% = (Text) Target 2 bei GÜ 2 und 3



Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: A non well formed numeric value encountered
Zeile: 501

PHP-Code

498 $ShowupMix = [];
499 for ($i=0; $i<count($indicesA); $i++) {
500   
501   $id = id('IV06', $indicesA[$i] + 1);
502
503 debug($i);
504 debug($indicesA);
Fehler im Fragebogen: A non well formed numeric value encountered
Zeile: 501

PHP-Code

498 $ShowupMix = [];
499 for ($i=0; $i<count($indicesA); $i++) {
500   
501   $id = id('IV06', $indicesA[$i] + 1);
502
503 debug($i);
504 debug($indicesA);
Fehler im Fragebogen: A non well formed numeric value encountered
Zeile: 501

PHP-Code

498 $ShowupMix = [];
499 for ($i=0; $i<count($indicesA); $i++) {
500   
501   $id = id('IV06', $indicesA[$i] + 1);
502
503 debug($i);
504 debug($indicesA);
Fehler im Fragebogen: A non well formed numeric value encountered
Zeile: 501

PHP-Code

498 $ShowupMix = [];
499 for ($i=0; $i<count($indicesA); $i++) {
500   
501   $id = id('IV06', $indicesA[$i] + 1);
502
503 debug($i);
504 debug($indicesA);
Fehler im Fragebogen: Undefined offset: 4
Zeile: 512

PHP-Code

509   $ShowupMix[$i] = $Showup_order[$indicesA[$i]];
510 }
511
512 setPageOrder($ShowupMix[0], 'S2', $ShowupMix[1], 'S3', $ShowupMix[3], 'S4', $ShowupMix[4], 'GK' );
513 }
514
515

>> gibt es eine effiziente Art, den Code mithilfe von {} einzufügen?
Vielen Dank!
debug()    Inhalt: $i = 0 (integer)
debug()    Inhalt: 04_Showup, 11_Showup, 23_Showup, 32_Showup
debug()    Inhalt: Keine Daten (null)

Gut, das bringt uns der Sache näher. Die zweite Zeile vor allem. Und zwar enthält $indicesA ja Text-Indizes und keine numerischen Indizes. Deshalb kann das hier nicht funktionieren:

$id = id('IV06', $indicesA[$i] + 1);

Die Lösung ist zum Glück ganz einfach. Lasse Sie im Array

$Showup_order = array (
 '1_Showup' => $Showup_order1,
 '2_Showup' => $Showup_order2,
 '3_Showup' => $Showup_order3,
 '4_Showup' => $Showup_order4
);

bitte einfach Indizes weg, also stattdessen:

$Showup_order = array (
 $Showup_order1,
 $Showup_order2,
 $Showup_order3,
 $Showup_order4
);
Vielen Dank für Ihre Antwort. Ich habe Ihre Änderungen übernommen. Aber leider... funktioniert es immer noch nicht richtig. Die Debug-Information gibt mir jetzt folgendes an:

[Information]    Interview Nummer 1838 wird fortgesetzt
[Information]    Der Fragebogen A_Videolaenge10072022 im Projekt test196703 wird verwendet
[Information]    Die Verweildauer auf Seite 11 war 1 Sekunden
[Verarbeitung]    Lese Antworten von Seite 11
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Erstelle Seite 12 in Fragebogen A_Videolaenge10072022
[Inhalt]    Zeige Text GU1 starten
[Information]    value("RA01") = 5
[Information]    value("RA01") = 5
[Information]    value("RA01") = 5
[Information]    value("RA01") = 5
[Information]    value("RA02") = 5
[Information]    value("RA02") = 5
[Information]    value("RA02") = 5
[Information]    value("RA02") = 5
[Information]    value("RA02") = 5
[Information]    Die interne Variable IV01_01 wird mit dem Wert 1 belegt.
[Information]    Die interne Variable IV01_02 wird mit dem Wert 2 belegt.
[Information]    Die interne Variable IV01_05 wird mit dem Wert 3 belegt.
[Information]    Die interne Variable IV01_04 wird mit dem Wert 4 belegt.
[Information]    Die interne Variable IV01_03 wird mit dem Wert 5 belegt.
[Information]    Die interne Variable IV01_06 wird mit dem Wert 6 belegt.
[Information]    Die interne Variable IV03_05 wird mit dem Wert 1 belegt.
[Information]    Die interne Variable IV03_02 wird mit dem Wert 2 belegt.
[Information]    Die interne Variable IV03_06 wird mit dem Wert 3 belegt.
[Information]    Die interne Variable IV03_03 wird mit dem Wert 4 belegt.
[Information]    Die interne Variable IV03_01 wird mit dem Wert 5 belegt.
[Information]    Die interne Variable IV03_04 wird mit dem Wert 6 belegt.
[Information]    Die interne Variable IV04_04 wird mit dem Wert 1 belegt.
[Information]    Die interne Variable IV04_06 wird mit dem Wert 2 belegt.
[Information]    Die interne Variable IV04_05 wird mit dem Wert 3 belegt.
[Information]    Die interne Variable IV04_03 wird mit dem Wert 4 belegt.
[Information]    Die interne Variable IV04_02 wird mit dem Wert 5 belegt.
[Information]    Die interne Variable IV04_01 wird mit dem Wert 6 belegt.
[Information]    Die interne Variable IV05_05 wird mit dem Wert 1 belegt.
[Information]    Die interne Variable IV05_01 wird mit dem Wert 2 belegt.
[Information]    Die interne Variable IV05_02 wird mit dem Wert 3 belegt.
[Information]    Die interne Variable IV05_06 wird mit dem Wert 4 belegt.
[Information]    Die interne Variable IV05_04 wird mit dem Wert 5 belegt.
[Information]    Die interne Variable IV05_03 wird mit dem Wert 6 belegt.
debug()    Inhalt: $i = 0 (integer)
debug()    Inhalt: 02, 11, 20, 33
debug()    Inhalt: Keine Daten (null)
debug()    Inhalt: $i = 1 (integer)
debug()    Inhalt: 02, 11, 20, 33
debug()    Inhalt: Keine Daten (null)
debug()    Inhalt: $i = 2 (integer)
debug()    Inhalt: 02, 11, 20, 33
debug()    Inhalt: $id = IV06_01 (string)
value('IV06_01') =
[Information]    Die interne Variable IV06_01 wird mit dem Wert 3 belegt.
debug()    Inhalt: $i = 3 (integer)
debug()    Inhalt: 02, 11, 20, 33
debug()    Inhalt: Keine Daten (null)
[Information]    Folgende Platzhalter sind vorbereitet:
%Bedingung% = (Text) sl_L_s1 (serial lineup, lon...
%Targetabsent% = (Text) Target 2 bei GÜ 2 und 4

Warnung (Seite 12)
Für die Frage IV06 wurde kein Item mit der Kennung 3 gefunden
Warnung (Seite 12)
Für die Frage IV06 wurde kein Item mit der Kennung 3 gefunden
Hinweis (Seite 12)
Debug-Information für $i:
$i = 0 (integer)
Hinweis (Seite 12)
Debug-Information für $indicesA:
02, 11, 20, 33
Hinweis (Seite 12)
Debug-Information für $id:
Keine Daten (null)
Fehler im Fragebogen (Seite 12)
Für die Funktion put() wurde anstatt einer Frage- oder Item-Kennung ein Parameter vom Typ NULL angegeben:
Warnung (Seite 12)
Für die Frage IV06 wurde kein Item mit der Kennung 2 gefunden
Warnung (Seite 12)
Für die Frage IV06 wurde kein Item mit der Kennung 2 gefunden
Hinweis (Seite 12)
Debug-Information für $i:
$i = 1 (integer)
Hinweis (Seite 12)
Debug-Information für $indicesA:
02, 11, 20, 33
Hinweis (Seite 12)
Debug-Information für $id:
Keine Daten (null)
Fehler im Fragebogen (Seite 12)
Für die Funktion put() wurde anstatt einer Frage- oder Item-Kennung ein Parameter vom Typ NULL angegeben:
Hinweis (Seite 12)
Debug-Information für $i:
$i = 2 (integer)
Hinweis (Seite 12)
Debug-Information für $indicesA:
02, 11, 20, 33
Hinweis (Seite 12)
Debug-Information für $id:
$id = IV06_01 (string)
value('IV06_01') =
Warnung (Seite 12)
Für die Frage IV06 wurde kein Item mit der Kennung 4 gefunden
Warnung (Seite 12)
Für die Frage IV06 wurde kein Item mit der Kennung 4 gefunden
Hinweis (Seite 12)
Debug-Information für $i:
$i = 3 (integer)
Hinweis (Seite 12)
Debug-Information für $indicesA:
02, 11, 20, 33
Hinweis (Seite 12)
Debug-Information für $id:
Keine Daten (null)
Fehler im Fragebogen (Seite 12)
Für die Funktion put() wurde anstatt einer Frage- oder Item-Kennung ein Parameter vom Typ NULL angegeben:
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: 627

PHP-Code

624   $ShowupMix[$i] = $Showup_order[$indicesA[$i]];
625 }
626
627 setPageOrder($ShowupMix[0], 'S2', $ShowupMix[1], 'S3', $ShowupMix[3], 'S4', $ShowupMix[4], 'GK' );
628 }
629
630
Nur zur Sicherheit: Sie haben eine Frage vom Typ "interne Variablen" mit der Kennung IV06 im Fragebogen und darin sind 4 Variable (Items) vorhanden?

Vielleicht möchte Sie in dem debug()-Block noch folgendes ergänzen:

debug($indicesA[$i]);

Was die Fehlermeldung am Ende angeht. Infolgender Zeile:

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

Sind die letzten beiden Indizes noch nicht korrekt:

setPageOrder($ShowupMix[0], 'S2', $ShowupMix[1], 'S3', $ShowupMix[2], 'S4', $ShowupMix[3], 'GK' );
Vielen Dank für den Hinweis. Das mit IV06 hatte ich tatsächlich überlesen. Eigentlich ist es IV12 - ich habe das im Code angepasst und auch ihre Änderungen übernommen.
Leider werden mir noch immer folgende Fehlermeldungen angezeigt:

[Information]    Interview Nummer 1841 wird fortgesetzt
[Information]    Der Fragebogen A_Videolaenge10072022 im Projekt test196703 wird verwendet
[Information]    Die Verweildauer auf Seite 11 war 1 Sekunden
[Verarbeitung]    Lese Antworten von Seite 11
[Information]    Fragen bisher zu 100% vollständig beantwortet
[Verarbeitung]    Erstelle Seite 12 in Fragebogen A_Videolaenge10072022
[Inhalt]    Zeige Text GU1 starten
[Information]    value("RA01") = 8
[Information]    value("RA01") = 8
[Information]    value("RA01") = 8
[Information]    value("RA01") = 8
[Information]    value("RA02") = 5
[Information]    value("RA02") = 5
[Information]    value("RA02") = 5
[Information]    value("RA02") = 5
[Information]    value("RA02") = 5
[Information]    Die interne Variable IV01_01 wird mit dem Wert 1 belegt.
[Information]    Die interne Variable IV01_06 wird mit dem Wert 2 belegt.
[Information]    Die interne Variable IV01_04 wird mit dem Wert 3 belegt.
[Information]    Die interne Variable IV01_02 wird mit dem Wert 4 belegt.
[Information]    Die interne Variable IV01_05 wird mit dem Wert 5 belegt.
[Information]    Die interne Variable IV01_03 wird mit dem Wert 6 belegt.
[Information]    Die interne Variable IV03_06 wird mit dem Wert 1 belegt.
[Information]    Die interne Variable IV03_04 wird mit dem Wert 2 belegt.
[Information]    Die interne Variable IV03_05 wird mit dem Wert 3 belegt.
[Information]    Die interne Variable IV03_02 wird mit dem Wert 4 belegt.
[Information]    Die interne Variable IV03_03 wird mit dem Wert 5 belegt.
[Information]    Die interne Variable IV03_01 wird mit dem Wert 6 belegt.
[Information]    Die interne Variable IV04_01 wird mit dem Wert 1 belegt.
[Information]    Die interne Variable IV04_04 wird mit dem Wert 2 belegt.
[Information]    Die interne Variable IV04_03 wird mit dem Wert 3 belegt.
[Information]    Die interne Variable IV04_06 wird mit dem Wert 4 belegt.
[Information]    Die interne Variable IV04_05 wird mit dem Wert 5 belegt.
[Information]    Die interne Variable IV04_02 wird mit dem Wert 6 belegt.
[Information]    Die interne Variable IV05_04 wird mit dem Wert 1 belegt.
[Information]    Die interne Variable IV05_01 wird mit dem Wert 2 belegt.
[Information]    Die interne Variable IV05_02 wird mit dem Wert 3 belegt.
[Information]    Die interne Variable IV05_05 wird mit dem Wert 4 belegt.
[Information]    Die interne Variable IV05_03 wird mit dem Wert 5 belegt.
[Information]    Die interne Variable IV05_06 wird mit dem Wert 6 belegt.
debug()    Inhalt: $i = 0 (integer)
debug()    Inhalt: 03, 11, 20, 32
debug()    Inhalt: $id = IV12_04 (string)
value('IV12_04') =
debug()    Inhalt: $indicesA[$i] = 3 (integer)
[Information]    Die interne Variable IV12_04 wird mit dem Wert 1 belegt.
debug()    Inhalt: $i = 1 (integer)
debug()    Inhalt: 03, 11, 20, 32
debug()    Inhalt: $id = IV12_02 (string)
value('IV12_02') =
debug()    Inhalt: $indicesA[$i] = 1 (integer)
[Information]    Die interne Variable IV12_02 wird mit dem Wert 2 belegt.
debug()    Inhalt: $i = 2 (integer)
debug()    Inhalt: 03, 11, 20, 32
debug()    Inhalt: $id = IV12_01 (string)
value('IV12_01') =
debug()    Inhalt: $indicesA[$i] = 0 (integer)
[Information]    Die interne Variable IV12_01 wird mit dem Wert 3 belegt.
debug()    Inhalt: $i = 3 (integer)
debug()    Inhalt: 03, 11, 20, 32
debug()    Inhalt: $id = IV12_03 (string)
value('IV12_03') =
debug()    Inhalt: $indicesA[$i] = 2 (integer)
[Information]    Die interne Variable IV12_03 wird mit dem Wert 4 belegt.
[Information]    Entsprechend setPageOrder() werden nun folgende Seiten gezeigt:
44 [s4GU4], 41 [s1GU4], 42 [s2GU4], 45 [s5GU4], 43 [s3GU4], 47 [s7GU4], 21 [S2], 29 [s7GU2], 26 [s4GU2], 27 [s5GU2], 24 [s2GU2], 25 [s3GU2], 23 [s1GU2], 30 [S3], 14 [s1GU1], 19 [s6GU1], 17 [s4GU1], 15 [s2GU1], 18 [s5GU1], 16 [s3GU1], 39 [S4], 32 [s1GU3], 35 [s4GU3], 34 [s3GU3], 37 [s6GU3], 36 [s5GU3], 33 [s2GU3], 48 [GK]
[Information]    Folgende Platzhalter sind vorbereitet:
%Bedingung% = (Text) sl_S_s2 (serial lineup, sho...
%Targetabsent% = (Text) Target 2 bei GÜ 2 und 4

Hinweis (Seite 12)
Debug-Information für $i:
$i = 0 (integer)
Hinweis (Seite 12)
Debug-Information für $indicesA:
03, 11, 20, 32
Hinweis (Seite 12)
Debug-Information für $id:
$id = IV12_04 (string)
value('IV12_04') =
Hinweis (Seite 12)
Debug-Information für $indicesA[$i]:
$indicesA[$i] = 3 (integer)
Hinweis (Seite 12)
Debug-Information für $i:
$i = 1 (integer)
Hinweis (Seite 12)
Debug-Information für $indicesA:
03, 11, 20, 32
Hinweis (Seite 12)
Debug-Information für $id:
$id = IV12_02 (string)
value('IV12_02') =
Hinweis (Seite 12)
Debug-Information für $indicesA[$i]:
$indicesA[$i] = 1 (integer)
Hinweis (Seite 12)
Debug-Information für $i:
$i = 2 (integer)
Hinweis (Seite 12)
Debug-Information für $indicesA:
03, 11, 20, 32
Hinweis (Seite 12)
Debug-Information für $id:
$id = IV12_01 (string)
value('IV12_01') =
Hinweis (Seite 12)
Debug-Information für $indicesA[$i]:
$indicesA[$i] = 0 (integer)
Hinweis (Seite 12)
Debug-Information für $i:
$i = 3 (integer)
Hinweis (Seite 12)
Debug-Information für $indicesA:
03, 11, 20, 32
Hinweis (Seite 12)
Debug-Information für $id:
$id = IV12_03 (string)
value('IV12_03') =
Hinweis (Seite 12)
Debug-Information für $indicesA[$i]:
$indicesA[$i] = 2 (integer)

Ich poste Ihnen auch noch einmal den Code, wie er nun vorliegt. Womöglich hat sich beim Übertragen auch einfach ein neuer Fehler eingeschlichen (zur Übersichtlichkeit finden Sie den unten in einer neuen Antwort auf meine Frage).
Ich sehe hier aber keine Fehlermeldungen mehr. Nur noch die Debug-Ausgabe, die von den 4 debug()-Zeilen erzeugt wird. Diese können Sie natülrich wieder herausnehmen, wenn die Infos korrekt gespeichert werden.

Wenn ich den Fehler einfach übersehe, helfen Sie mir bitte nochmal auf die Sprünge.
Nein, das scheint dann alles richtig zu sein. Ich war von den gelben Debug-Feldern irritiert. Aber die tauchen ja tatsächlich nur in dem Modus auf!

Vielen Dank für Ihre Hilfe! Ich werde jetzt testen, ob alles so klappt, wie es gedacht war :)
0 votes

Hier noch einmal der aktuelle Code (Stand 14.07.20 um 14:46 Uhr):

// Erst einmal die Seitenkennungen als Arrays speichern
$Showup = array (
'Showup11' => array('s1GU1', 's2GU1', 's3GU1', 
                 's4GU1', 's5GU1', 's7GU1'),

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

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

'Showup41' => 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 $Showup herausnehmen, etc.
$Showup1 = array_shift($Showup);
$Showup2 = array_shift($Showup);
$Showup3 = array_shift($Showup);
$Showup4 = array_shift($Showup);


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

$indices1 = array_keys($Showup1);
shuffle($indices1);
registerVariable('indices1');
// Nun die Ränge speichern - und die neue Abfolge der Seiten in $Showup_order speichern
$Showup_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
  $Showup_order1[$i] = $Showup1[$indices1[$i]];
}

$indices2 = array_keys($Showup2);
shuffle($indices2);
registerVariable('indices2');
// Nun die Ränge speichern - und die neue Abfolge der Seiten in $Showup_order speichern
$Showup_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
  $Showup_order2[$i] = $Showup2[$indices2[$i]];
}

$indices3 = array_keys($Showup3);
shuffle($indices3);
registerVariable('indices3');
// Nun die Ränge speichern - und die neue Abfolge der Seiten in $Showup_order speichern
$Showup_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
  $Showup_order3[$i] = $Showup3[$indices3[$i]];
}

$indices4 = array_keys($Showup4);
shuffle($indices4);
registerVariable('indices4');
// Nun die Ränge speichern - und die neue Abfolge der Seiten in $Showup_order speichern
$Showup_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
  $Showup_order4[$i] = $Showup4[$indices4[$i]];
}


$Showup_order = array (
 $Showup_order1,
 $Showup_order2,
 $Showup_order3,
 $Showup_order4
);
// Die Schlüssel mischen, nicht das Array selbst
$indicesA = array_keys($Showup_order);
shuffle($indicesA);

// Jetzt wieder Reihenfolge speichern und ein gemischtes Array erzeugen
$ShowupMix = [];
for ($i=0; $i<count($indicesA); $i++) {
  // Rang speichern
  $id = id('IV12', $indicesA[$i] + 1);

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

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

setPageOrder($ShowupMix[0], 'S2', $ShowupMix[1], 'S3', $ShowupMix[2], 'S4', $ShowupMix[3], 'GK' );
}
by s137634 (660 points)
...