0 votes
in SoSci Survey (dt.) by s253424 (200 points)

Mein Ziele (Masterarbeit):
1. Seiten rotieren (es handelt sich dabei um 3 Skalen, die jeder Teilnehmer dargestellt bekommt, aber in einer anderen Reihenfolge). Das habe ich bereits erfolgreich per Zufallsgenerator "Seiten rotieren" gemacht.
2. Nun möchte ich gleichzeitig dass die Fragen der einen der 3 Skalen untereinander rotiert werden. Anmerkung: Jede Frage ist als Text formuliert (hat einen bestimmten Grund und wird so erstmal nicht geändert), sodass ich auch "Texte" rotieren könnte. Jede Frage/Text dieser Skala ist auf einer eigenen Seite, sodass ich auch Seiten rotieren könnte. Da es sich jedoch um 21 Textelemente/Fragen handelt, erscheint es mir nicht sinnvoll 21x20 Rotationsmöglichkeiten per Zufallsgenerator zu generieren.

Ich frage mich, welche Art der Rotation (oder ist es sogar Randomisierung?) am schlausten ist. Ich habe die Sorge, dass die Rotation innerhalb der einen Skala (Ziel 2.) meine Rotation der Skalen (Seiten) "gefährdet".
Ich habe bisher keine php codes verwendet und bin nicht Technologie affin. Freue mich über jeden Tipp! :)

by SoSci Survey (327k points)
Okay, nochmal für Menschen, die hitzebedingt etwas langsamer denken :)

3 Skalen, Items ausgestaltet als einzelner Fragen ist z.B. Fragen
AB01 bis AB07
BB02 bis BB07
CB02 bis CB07

Und Sie möchten jetzt einmal die drei Blöcke rotieren und innerhalb der der Blöcke die einzelnen Fragen, die wiederum auf einzelnen Seiten stehen. Soweit korrekt?
by s253424 (200 points)
Ich hoffe du genießt die Sonne!
ja bzw. möchte ich nur die Fragen innerhalb eines dieser Blöcke rotieren (ist ja aber an sich das gleiche). Zur Veranschaulichung der Fragen, die ich rotieren möchte (und weshalb es als Textelement dargeboten wird):

" Situation x y..." (Text als Frage)

Frage 1 (wie häufig erlebt)
Frage 2 (wie bewertet)
Das ist sozusagen "eine Frage" und jede auf einer Seite. die Items der anderen 2 Blöcke bleiben in der gleichen Reihenfolge.

1 Answer

0 votes
by SoSci Survey (327k points)

Die genaue Umsetzung hängt daran, ob Text und die beiden Items in einer Frage untergebracht sind oder auf mehrere Fragen verteilt sind.

Aber im Prinzip brauchen Sie das hier:
Rotierte Block-Abfolge

Also Arrays mit shuffle() mischen und dann wieder zusammenfügen. Das kann man entweder mit Seiten-Kennungen, oder mit Frage-Kennungen (plus loopPage()) oder mit Arrays machen, die mehrere Elemente (z.B. Text plus Frage) enthalten.

by s253424 (200 points)
Leider verstehe ich die 2 Vorgehensweisen (Variante 1 und 2) nicht ganz.

Wenn ich Variante 1 (mit Zufallsgenerator) nutze, habe ich ja das Problem, dass ich manuell den gewünschten Zufall eingebe? Bei 21 Seiten/Fragen ist das ja nicht möglich. Oder sehe ich das falsch?
Da wäre Zufallsgenerator 1: Blöcke (gemacht)
Zufallsgenerator 2: Seiten des einen Blocks in zufälliger Reihenfolge darstellen


Ohne Zufallsgenerator mit array() : Ich muss die Präsentationsabfolge der Blockrotation speichern. Die Rotation der Fragen (Seiten innerhalb des Blocks) jedoch nicht. Kann ich dann folgenden Code nutzen:
$pages = [
  ['S1', 'S2'],
  ['S3', 'S4', 'S5'],
  ['S6', 'S7', 'S8']
];
 
// Jeden Block in sich mischen
for ($i=0; $i<count($pages); $i++) {
  shuffle($pages[$i]);
}
 
// Als Seitenabfolge verwenden
setPageOrder($pages, 'posttest');

Oder geht das nur in Kombi mit den übergeordneten Blöcken?

Kann ich beide Randomisierungen nicht unabhängig voneinander handhaben, sodass (1) Zufallsgenerator der Blöcke und dann nochmal einen Zufallsgenerator oder php Code für die Randomisierung der Seiten? Ich will schließlich nur die Seiten des einen Blocks randomisieren.
by SoSci Survey (327k points)
> Wenn ich Variante 1 (mit Zufallsgenerator) nutze, habe ich ja das Problem, dass ich manuell den gewünschten Zufall eingebe?

Wenn Sie der verlinkten Anleitung folgen, hätten Sie einen Zufallsgenerator pro Block (also naürlich nur für Blöcke, bei denen Sie die Seiten rotieren möchten) und einen weiteren, welcher die Reihenfolge der Blöcke rotiert.

Alöso genau das, was Sie möchten :)

>  Ich muss die Präsentationsabfolge der Blockrotation speichern.

Dann wäre die Option mit Zufallsgeneratoren m.E. einfachern. Aber man könnte theoretisch auch ein shuffle() abspeichern: https://www.soscisurvey.de/help/doku.php/de:create:functions:put#beispielrandomisierung_i
by s253424 (200 points)
Variante 1:
Entschuldigung, dass ich noch einmal nachhake. Da Block 1 21 Seiten enthält, muss ich 21 Zettel manuell erstellen, oder? Und dann wird zwischen diesen Zetteln rotiert, aber nicht randomisiert, richtig? Sprich ich habe dann 21 Versionen, wo die Reihenfolge unterschiedlich ist aber nicht 21x20 unterschiedliche Reihenfolge wie bei einer kompletten Randomisierung?
Den Zufallsgenerator für die Blöcke habe ich bereits erstellt.
by SoSci Survey (327k points)
> 21x20 unterschiedliche Reihenfolge

Wenn Sie einen Zufallsgenerator mit 21 Zetteln anlegen und daraus 2 ziehen, hätten Sie jeweils 2 aus 21 Fragen, und damit 21 x 20 mögliche Kombinationen. Ist es das, was Sie haben möchten? Diese Randomisierung scheint mir nicht so ganz zu Ihrer bisherigen Beschreibung zu passen?!

Oder anders gefragt: Beschreiben Sie den betroffenen Block gerne nochmal genauer. Es sind 21 Skalenitems/Fragen? Wie viele davon sollen abgefragt werden?
by s253424 (200 points)
Alle Teilnehmer sollen alle Fragen dargeboten bekommen. Lediglich die Reihenfolge der Blöcke und der Seiten innerhalb des einen Blocks soll unterschiedlich sein. So habe ich es für die Rotation der 3 Blöcke gemacht: https://www.soscisurvey.de/help/doku.php/de:create:rotation-pages?s[]=%2Ashuffle%2A
Dem liegt zugrunde, dass wir Sequenzeffekte erwarten und vermeiden wollen.

Bisher habe ich einen Zufallsgenerator für die 3 Blöcke mit 6 Zetteln erstellt, wobei jeder 1 Mal gezogen wird.

Nun möchte ich, dass jeder Teilnehmer auch die 21 Fragen (die innerhalb des 1. Blocks) beantwortet, aber eben nicht die gleiche Reihenfolge präsentiert bekommen. Wenn ich 21 Zettel erstelle und jeder Zettel 1 Mal gezogen werden soll, dann habe ich 21 unterschiedliche Reihenfolgen, oder? Welchen Einfluss hat die Anzahl der Zettel/Interview? Ich dachte, wenn ich 2 Zettel pro Interview habe, dann werden die Fragen 2 Mal in unterschiedlicher Reihenfolge für einen Teilnehmer angezeigt? Also nicht, das was ich möchte.

Im Grunde wäre das eine Möglichkeit : "Wenn die Rotation für Ihre Studie eine sehr wichtige Rolle spielt, etwa weil Sie Reihenstellungseffekte untersuchen, dann kann es durchaus sinnvoll sein, alle 120 möglichen Seitenabfolgen einzeln aufzulisten und in einem Zufallsgenerator zu hinterlegen, wie oben beschrieben. In einer Tabellenkalkulation wie LibreOffice Calc oder Excel ist das mittels Copy&Paste recht schnell erledigt. Nur so können Sie sicherstellen, eine ausreichende Anzahl von Befragten vorausgesetzt, dass wirklich alle möglichen Seitenabfolgen auch getestet werden."
Ich habe jedoch gehofft, dass es eine einfachere Möglichkeit gibt :)
by SoSci Survey (327k points)
> Wenn ich 21 Zettel erstelle und jeder Zettel 1 Mal gezogen werden soll, dann habe ich 21 unterschiedliche Reihenfolgen, oder?

Ja. Aber wenn Sie bei diesem (und nur bei diesem) Zufallsgenerator alle 21 Seiten-Kennungen einzeln hineinlegen, und pro Interview 21 Zettel ziehen, haben Sie alle 21! = sehr viele möglichen Kombinationen. Also eine klassische zufällig Rotation.
by s253424 (200 points)
Danke für die schnelle und hilfreiche Antwort. Vielleicht könnten Sie mir ein letztes Mal helfen.


Ich habe nun 2 Zufallsgeneratoren angelegt.
ZG1 (Blockration). 3 Zettel mit 3 Ziehungen , Bezeichnung Frage = RG01 wobei 1 Zettel ein Block darstellt

ZG2 (Seitenrotation innerhalb des 1. Blocks): 21 Zettel mit 21 Ziehungen, Bezeichnung: DI01 wobei 1 Seite einen Zettel darstellt

Nun habe ich vor Beginn der vorgesehenen Rotation folgenden PHP Code eingegeben und eine Reihe an Fehlermeldungen bekommen, die ich versucht habe zu beheben aber nicht vollständig durchblicke:

$blockfolge = array_values (valueList('RG01'));
$blocks = [
  1 => valueList(‘DI’01, null, 'label'),

];
$gesamtliste = array_merge(
  []
  $blocks[$blockfolge[0]],
  $blocks[$blockfolge[1]],
  $blocks[$blockfolge[2]]
);
setPageOrder($gesamtliste, 'SD');


Wofür steht ‘SD’?

Für die Rotation der Blöcke hat folgender Code fehlerfrei funktioniert:
question('RG01');  // Zettel in zufälliger Reihenfolge ziehen
$pages1 = valueList('RG01', NULL, 'label');  // Gezogene Zettel auslesen
setPageOrder($pages1, 'posttest');  // Seiten als Seitenabfolge definieren

Shuffle Option:

$pages = [
  ['S', 'S2'],
  ['S3', 'S4', 'S5'],
  ['S6', 'S7', 'S8']
];

-_> Bzw. meine persönliche Seitenkennung der 21 zu randomsierenden Seiten
 
// Jeden Block in sich mischen
for ($i=0; $i<count($pages); $i++) {
  shuffle($pages[$i]);
}
 
// Das übergeordnete Array mischen
shuffle($pages);
 
// Als Seitenabfolge verwenden
setPageOrder($pages, 'posttest');

—> Muss ich an dem Code noch etwas ändern?

Anmerkung: Die anderen beiden Blöcke haben jeweils nur 1 Seite, sprich die Seiten in sich können/müssen nicht randomsiert werden. Vielleicht liegt da der Fehler?
by SoSci Survey (327k points)
> Wofür steht ‘SD’?

Das ist die Kennung der Seite, wo es nach der letzte Seite der Seitenabfolge weitergehen soll. Also z.B. bei der "Soziodemografie".

> Muss ich an dem Code noch etwas ändern?

Der Teil mit dem shuffle() macht hier m.E. keinen Sinn. Sie nutzen ja einen Zufallsgenerator zum Mischen der Abfolge.

> Für die Rotation der Blöcke hat folgender Code fehlerfrei funktioniert:

Dann sollten Sie dort aufbauen. Wie sehen denn die drei Zettel in Ihrem 3er Zufallsgenerator aus?
by s253424 (200 points)
Hallo nochmal. Ich habe so einiges rumprobiert und die verschiedensten Fehlermeldungen bekommen. Ich habe nun 4 Zufallsgeneratoren angelegt, sodass ich den von Handbuch vorgeschlagenen php Code leichter übernehmen kann.
Meine Zufallsgeneratoren sehen wie folgt aus:
RG01:
1 = SU, SU46, SU70, SU26, SU20, SU67, SU35, SU25, SU55, SU28, SU76, SU03, SU27, SU48, SU31, SU53, SU63, SU78, SU18, SU81, SU69, SU12
2 = SU00
3 = OFF

--> 3 Ziehungen

Zufallsgenerator RG02:
1= SU00
--> 1 Ziehung

Zufallsgenerator RG03:
1=OFF

Zufallsgenerator RG04 (22 Zettel, da ich die Seite mit der Einleitung zu den Fragestellungen hinzugefügt habe):
01 = SU35,  
02 = SU03,
03 = SU46
04 = SU27
05 = SU76
06 = SU18
07 = SU81
08 = SU26
09 = SU25
10 = SU28
11 = SU67
12 = SU20
13 = SU48
14 = SU70
15 = SU78
16 = SU12
17 = SU63
18 = SU53
19 = SU31
20 = SU69
21 = SU55
22 = SU

--> 22 Ziehungen

Ich habe alle Zufallsgeneratoren auf die Seite vor der zuerst rotierenden Seite gelegt und folgenden php Code genutzt:
## Blockabfolge ZG Name = RG01 und einzelne Blöcke heißen RG02, RG03, RG04 ( in RG04 = 21 Zettel mit 21 Ziehungen)
$blockfolge = array_values(valueList('RG01'));
$blocks= [
  1 => valueList('RG02' , null, 'label'),
  2 => valueList('RG03' , null, 'label'),
  3 => valueList('RG04' , null, 'label')
];
$gesamtliste = array_merge(
  ['SU']
  $blocks[$blockfolge[0]],
  $blocks[$blockfolge[1]],
  $blocks[$blockfolge[2]];
)

## Reihenfolge bestimmen und sagen, wo die Rotation vorbei ist
setPageOrder($gesamtliste, 'posttest' );

Im Fragebogen ist auch die Seite mit der Kennung "posttest angelegt.
Ich bekomme folgende Warnung: Warnung: Unerwartetes Element: $blocks - fehlt hier vielleicht ein Semikolon (;) oder Anführungszeichen?
$gesamtliste = array_merge(
  ['SU']
  $blocks

Warnung: Unerwartetes Element: setPageOrder - fehlt hier vielleicht ein Semikolon (;) oder Anführungszeichen?
)


setPageOrder

Warnung: Die Anzahl öffnender Klammern (6) und schließender Klammern (5) stimmt hier nicht überein:
$gesamtliste = array_merge(
  ['SU']
  $blocks[$blockfolge[0]],
  $blocks[$blockfolge[1]],
  $blocks[$blockfolge[2]];     und im Fragebogen folgende Fehlermeldung:
Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: Befehl oder String (Text) nicht abgeschlossen

Hinter einem Befehl wie z.B. question() steht kein Strichpunkt oder
ein String (Text in Anführungszeichen) ist nicht abgeschlossen oder
im String selbst kommt ein Anführungszeichen vor, z.B. html('Mach's besser!'); – in diesem Fall stellen Sie dem Anführungszeichen einen Backslash (\) voran.
Möglicherweise stimmen die öffnenenden und schließenden geschweiften Klammern für Anweisungsblöcke auch nicht überein.
PHP-Code

008   3 => valueList('RG04' , null, 'label')
009 ];
010 $gesamtliste = array_merge(
011   ['SU']
012   $blocks[$blockfolge[0]],
013   $blocks[$blockfolge[1]],
014   $blocks[$blockfolge[2]];
015 )


Außerdem frage ich mich, wie er anhand dieses Codes die einzelnen zu rotierenden Seiten des Blocks RG04 erkennt. Sollte ich das nicht noch irgendwo definieren?
by SoSci Survey (327k points)
Erledigen wir die Fehlermeldungen ganz entspannt von oben nach unten:

> Warnung: Unerwartetes Element: $blocks - fehlt hier vielleicht ein Semikolon (;) oder Anführungszeichen?

$gesamtliste = array_merge(
  ['SU']
  $blocks[$blockfolge[0]],
  $blocks[$blockfolge[1]],
  $blocks[$blockfolge[2]];

Da fehlt ein Komma in Zeile 2 und die Klammer muss wieder geschlossen werden, also

$gesamtliste = array_merge(
  ['SU'],
  $blocks[$blockfolge[0]],
  $blocks[$blockfolge[1]],
  $blocks[$blockfolge[2]]
);

Die anderen beiden Fehlermeldungen besagen im Prinzip nochmal dasselbe.
by s253424 (200 points)
Vielen lieben Dank!
Endlich :)

PS: Das funktioniert leider nur einwandfrei wenn man keine manuelle Fortschrittsanzeige per php code eingestellt hat. Auf den verzichte ich jetzt einfach. für meine Zwecke reicht das.
by SoSci Survey (327k points)
>  keine manuelle Fortschrittsanzeige per php code eingestellt hat

Naja, das ist irgendie klar, oder? ;) Sie könnten die manuelle Justierung theoretisch über loopIndex() noch realisieren/optimieren - aber das wird eher kompliziert.
by s253424 (200 points)
Ich hab leider nicht genau hingeschaut und es wird doch nicht ganz so dargestellt wie gewünscht. Die Seite 'SU' soll nicht vor einem bestimmten Block kommen sondern vor einer der Fragegrupppe ( die berühmten 21 Seiten) (Also feste Seitenposition), weil sie die Einführung zu genau diesen Fragen ist, aber nicht die der anderen Fragegruppen. Laut Manual scheint dieser Befehl richtig zu sein:  https://www.soscisurvey.de/help/doku.php/de:create:rotation-pages (Einzelne Seiten an fester Position). Kann ich in meinen aktuellen Code den Befehl "array_splice" einfach einfügen oder sind die beiden Herangehensweisen nicht kompatibel? Ich müsste dann auch die Seite aus dem entsprechenden Zufallsgenerator nehmen oder?
by SoSci Survey (327k points)
Wie sieht denn Ihre Definition der Varable $blocks im aktuellen PHP-Code aus?

> Kann ich in meinen aktuellen Code den Befehl "array_splice" einfach einfügen

Im Prinzip ist das unproblematisch. Aber ich denke, dass Sie das 'SU' eher mittels array_merge() dem Block voranstellen würden.
by s253424 (200 points)
Hier mein gesamter Code und die Definition der Blöcke  (ohne ['SU'] vor den Blöcken).
Die Seite 'SU' ist aktuell einer von 22 Zettel von RG04 und soll als erste Seite des Blocks RG04 aber nicht vor RG02 und RG03 sein. RG01 ist der Zufallsgenerator der 3 Blöcke.
Ist mein Block nicht richtig definiert?

$blockfolge = array_values(valueList('RG01'));
$blocks = [
  1 => valueList('RG02', null, 'label'),
  2 => valueList('RG03', null, 'label'),
  3 => valueList('RG04', null, 'label')
];
$gesamtliste = array_merge(
  $blocks[$blockfolge[0]],
  $blocks[$blockfolge[1]],
  $blocks[$blockfolge[2]]
);
setPageOrder($gesamtliste, 'posttest');

Hier auch nochmal meine Zetter des Zufallsgenerator RG01 ('SU' als Seite mit im 1. Zettel) :
1 = SU, SU46, SU70, SU26, SU20, SU67, SU35, SU25, SU55, SU28, SU76, SU03, SU27, SU48, SU31, SU53, SU63, SU78, SU18, SU81, SU69, SU12
2 = SU00
3 = OFF
--> Wahrscheinlich wissen Sie das schon, aber ['SU'] als fixe Seite vor den Blöcken zu definieren, führt dazu, dass sie zwar vor dem entsprechenden Block kommt (sprich zb RG02) aber nicht vor den Fragen des einen Blocks mit den 21 Seiten.
by SoSci Survey (327k points)
Nehmen Sue SU aus dem RG04 und ändern Sie die Zeile

 3 => valueList('RG04', null, 'label')

wie folgt

 3 => array_merge(['SU'], array_values(valueList('RG04', null, 'label')))

Und wenn Sie dabei sind, dann nehmen Sie RG02 und RG03 gleich aus dem Spiel:

$blocks = [
  1 => array_merge(['SU'], array_values(valueList('RG04', null, 'label'))),
  2 => ['SU00'],
  3 => ['OFF']
];

Wie Sie die Zettel in RG01 beschriften, ist im Prinzip egal. Aber die Nummern und Labels sollten zu der Definition von $blocks passen, damit Sie das am Ende korrekte interpretieren können.
by s253424 (200 points)
Sorry für diesen langen Chat, aber leider hat das bei mir nicht geklappt. Mir wird angezeigt, dass der String oder mein Array nicht richtig definiert ist und deswegen der Befehl " array_merge" nicht ausgeführt werden kann (bzw. habe ich verschiedene Dinge ausprobiert und bekomme je nachdem, andere Fehlermeldungen).
Was meinen Sie mit "RG02" und "RG03" aus dem Spiel lassen? Wenn ich sie als blocks entferne, werden sie ja nicht rotiert, oder? Da "SU00" und "OFF" die Zettel und Seitenbeschriftungen sind aber nicht die Fragekennungen, belasse ich es bei den Fragekennungen der Zufallsgeneratoren "RG02" und "RG03", oder? Oder nehme ich die Fragekennungen aus den Katalog "KV" (der Inhalt des Zufallsgenerators RG02) und "OD" (Der Inhalt des Zufallsgenerators "RG03).

Vielleicht zur Veranschaulichung, wie ich Ihre Antwort u.a. umgesetzt habe:

$blockfolge = array_values(valueList('RG01'));
$blocks = [
 1 => array_merge(['SU'], array_values(valueList('RG04', null, 'label'))),
 2 => valueList['RG02', null, 'label'],
 3 => valueList['RG03', null, 'label']
];
$gesamtliste = array_merge(
  $blocks[$blockfolge[1]],
  $blocks[$blockfolge[2]],
  $blocks[$blockfolge[3]],
 
);

  
setPageOrder($gesamtliste, 'posttest');

Vielleicht wäre es auch hilfreich für mich zu verstehen, wie die Blockfolgen prinzipiell definiert werden. Im Code im Handbuch kann ich als Laie nicht nachvollziehen, weshalb die Blockfolge "0" gemergt wird, obwohl sie vorher nicht entsprechend definiert wurde:

$blockfolge = array_values(valueList('RG01'));
$blocks = [
  1 => valueList('RG02', null, 'label'),
  2 => valueList('RG03', null, 'label'),
  3 => valueList('RG04', null, 'label')
];
$gesamtliste = array_merge(
  $blocks[$blockfolge[0]],
  $blocks[$blockfolge[1]],
  $blocks[$blockfolge[2]]
);
setPageOrder($gesamtliste, 'SD');

Einen schönen Start in die Woche wünsche ich!
by SoSci Survey (327k points)
edited by SoSci Survey
> Mir wird angezeigt, dass der String oder mein Array nicht richtig definiert ist und deswegen der Befehl " array_merge" nicht ausgeführt werden kann

Wie lautet bitte die exakte Fehlermeldung?

Fügen Sie bitte noch ein paar debug() ein, damit wir sehen, was da passiert:

$blockfolge = array_values(valueList('RG01'));
debug($blockfolge);

$blocks = [
 1 => array_merge(['SU'], array_values(valueList('RG04', null, 'label'))),
 2 => valueList('RG02', null, 'label'),
 3 => valueList('RG03', null, 'label')
];
debug($blocks);

$gesamtliste = array_merge(
  $blocks[$blockfolge[1]],
  $blocks[$blockfolge[2]],
  $blocks[$blockfolge[3]]
);
debug($gesamtliste);

> Vielleicht wäre es auch hilfreich für mich zu verstehen, wie die Blockfolgen prinzipiell definiert werden.

Am Ende brauchen Sie eine Liste, in welcher die Seiten stehen. Das kann ein String sein "A,B,C-F,G" oder ein Array ['A', 'B', 'C-F', 'G']. Nachdem Sie das dynamisch anpassen möchten, nehmen Sie das Array. Und jetzt müssen Sie "nur noch" über ein paar Spielereien dafür sorgen, dass die Elemente des Arrays so liegen, wie sie am Ende sein sollen.

Ist diese Erklärung zur "Definition" hilfreich? Eher nicht, befürchte ich. Könnten Sie die Frage nochmal anders formulieren?
by s253424 (200 points)
mit oder ohne (debug) kommt folgende Fehlermeldung:
Im PHP-Code trat ein Fehler auf: (Zeile 7 und 8 also bezogen auf die Blöcke 1 und 2 sind rot markiert).

Fehler im Fragebogen: Befehl oder String (Text) nicht abgeschlossen

Hinter einem Befehl wie z.B. question() steht kein Strichpunkt oder
ein String (Text in Anführungszeichen) ist nicht abgeschlossen oder
im String selbst kommt ein Anführungszeichen vor, z.B. html('Mach's besser!'); – in diesem Fall stellen Sie dem Anführungszeichen einen Backslash (\) voran.
Möglicherweise stimmen die öffnenenden und schließenden geschweiften Klammern für Anweisungsblöcke auch nicht überein.
PHP-Code

004 debug($blockfolge);
005
006 $blocks = [
007 1 => array_merge(['SU'], array_values(valueList('RG04', null, 'label'))),
008 2 => valueList['RG02', null, 'label'],
009 3 => valueList['RG03', null, 'label']
010 ];
011 debug($blocks);

--> Könnte es daran liegen , dass RG04 & RG02 die Kennung der Zufallsgeneratoren (mit dem Inhalt der Fragen als Zettel) aber nicht der Fragen/Seiten an sich sind? Vermutlich nicht, sonst gäbe es ja auch eine Fehlermeldung  für die Zeile 'RG03'.

Am Ende brauchen Sie eine Liste, in welcher die Seiten stehen. Das kann ein String sein "A,B,C-F,G" oder ein Array ['A', 'B', 'C-F', 'G']. Nachdem Sie das dynamisch anpassen möchten, nehmen Sie das Array. Und jetzt müssen Sie "nur noch" über ein paar Spielereien dafür sorgen, dass die Elemente des Arrays so liegen, wie sie am Ende sein sollen.

> Jein. Ist durch die Zuordnung der Blöcke (1,2 und 3) der String nicht bereits definiert? Das ist mir unklar. Oder sollte ich im Code selbst ein Mal eine Liste mit allen Seiten (Elemente) anlegen? Im Handbuch vorgeschlagenem Code stellt die Blockfolge [0] also diese Liste. Wie kommt es, dass sie weiter oben nicht als block definiert ist?
by s253424 (200 points)
Oder liegt es an der Definition von RG01: Die Frage heißt RG01 und die zugehörigen Variablen im Generator für die einzelnen Zettel sind wie folgt:
RG0undefined (1) SU00 (2) OFF (3) SU: Vollständige Leerungen der Urne bisher
Ganze Zahl

RG01x01undefined (1) SU00 (2) OFF (3) SU: Gezogener Code (1)
RG01x02undefined (1) SU00 (2) OFF (3) SU: Gezogener Code (2)
RG3undefined (1) SU00 (2) OFF (3) SU: Gezogener Code (3)
1 = SU, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21
2 = SU00
3 = OFF
by SoSci Survey (327k points)
> Fehlermeldung

Die müssen Sie auf alle FÄlle als erstes lösen ... sonst kann das ganze nicht funktionieren.

> Befehl oder String (Text) nicht abgeschlossen

Ein sogenannter Syntaxfehler, also einfach ein Schreibfehler. Und zwar hier:

valueList['RG02', null, 'label'],

Funktionen wie valueList() brauchen runde Klammern. Eckige Klammern sind für die Defintion von Arrays. Mein Fehler, hatte ich oben übersehen - jetzt ist es oben korrigiert.

> Ist durch die Zuordnung der Blöcke (1,2 und 3) der String nicht bereits definiert?

Durch $blocks = [...] definieren Sie ein Array.

> Oder liegt es an der Definition von RG01

Diesen Inhalt nutzt Ihr PHP-Code gar nicht, dort muss nur 1, 2, 3 als Codes verfügar sein. Das ist der Fall.
by s253424 (200 points)
Also wenn ich die Klammern rund mache, bekomme ich zumindest nicht mehr die Fehlermeldung, dass ein String fehlt. Mir wird jedoch für alle 3 Blockfolgen „undefined array key“ angezeigt (mit und ohne debug()).
Es scheint, als fehle der Funktion eine wichtige Information?
Ich bin langsam etwas verzweifelt.

Wäre shuffle() wohl doch eine gute Alternative?
Wie und wo würde ich hier die feste Seite einfügen, angenommen er soll vor den Block 1 (S1, S2)

 $pages = [
  ['S1', 'S2'],
  ['S3', 'S4', 'S5'],
  ['S6', 'S7', 'S8']
];
 
// Jeden Block in sich mischen
for ($i=0; $i<count($pages); $i++) {
  shuffle($pages[$i]);
}
 
// Als Seitenabfolge verwenden
setPageOrder($pages, 'postest');
by SoSci Survey (327k points)
> Mir wird jedoch für alle 3 Blockfolgen „undefined array key“ angezeigt (mit und ohne debug()).

Zumindest das debug($blocks); sollte etwas anzeigen.

Abgesehen davon bräuchte ich bitte die komplette Debug-Information, um genaueres sagen zu können.

> Wäre shuffle() wohl doch eine gute Alternative?

Wenn Sie die Reihenfolge post-hoc in der Analyse nicht wissen müssen, können Sie auch shuffle() verwenden.
by s253424 (200 points)
Zumindest das debug($blocks); sollte etwas anzeigen.
> das debug() zeigt 1,2,3

Abgesehen davon bräuchte ich bitte die komplette Debug-Information, um genaueres sagen zu können.

> hier die vollständige Fehlermeldung:
Im PHP-Code trat ein Fehler auf.

Es wäre schon gut die Reihenfolge Post hoc zu wissen. Wenn es aber so nicht klappt, wäre es notfalls auch okay.

Vielen Dank für Ihre Geduld jedenfalls :)
Fehler im Fragebogen: Undefined array key ""
Zeile: 13

PHP-Code

010 ];
011
012 $gesamtliste = array_merge(
013  $blocks[$blockfolge[0]],
014  $blocks[$blockfolge[1]],
015  $blocks[$blockfolge[2]]
016 );
Fehler im Fragebogen: Undefined array key ""
Zeile: 14

PHP-Code

011
012 $gesamtliste = array_merge(
013  $blocks[$blockfolge[0]],
014  $blocks[$blockfolge[1]],
015  $blocks[$blockfolge[2]]
016 );
017
Fehler im Fragebogen: Undefined array key ""
Zeile: 15

PHP-Code

012 $gesamtliste = array_merge(
013  $blocks[$blockfolge[0]],
014  $blocks[$blockfolge[1]],
015  $blocks[$blockfolge[2]]
016 );
017
018
Fehler im Fragebogen: array_merge(): Argument #1 must be of type array, null given
Zeile: 12

PHP-Code

009 3 => valueList('RG03', null, 'label')
010 ];
011
012 $gesamtliste = array_merge(
013  $blocks[$blockfolge[0]],
014  $blocks[$blockfolge[1]],
015  $blocks[$blockfolge[2]]
by SoSci Survey (327k points)
Die Debug-Information finden Sie hier:
https://www.soscisurvey.de/help/doku.php/de:create:debugging

Die Fehlermeldung besagt, dass unter $blockfolge[0] nichts gespeichert ist. Warum das so ist, kann ich besser ermitteln, wenn Sie mal den kompletten PHP-Code und die vorgenannte Debug-Information posten. Die vollständigen Fehlermeldungen sind aber auch schonmal hilfreich :)
by s253424 (200 points)
Okay, ja die Fehlermeldungen sind sehr hilfreich. Sie sagt, ich soll die Fragen RG01,RG02, RG03,RG04 erstellen. Diese heißen auch wirklich so und sind auf der Seite wo auch der php Code ist, angelegt. Also nehme ich an, dass es doch so ist, dass ich nicht die „Fragen“ des Zufallsgenerators sondern die Kennung der Fragen selbst nehme? Bei einem Block handelt es sich um 21 texte, und 2 mal 21 fragen wobei alle in einzelnen rubriken untergebracht sind. Gebe ich dann einfach statt RG04 alle 63 fragenkennungen an oder die seitenkennungen?

Mein vollständiger php Code, ist immer noch dieser, bzw habe ich es mit blockfolge 0 statt blockfolge 1 probiert, da ein Array für gewöhnlich so anfängt.
$blockfolge = array_values(valueList('RG01'));
debug($blockfolge);

$blocks = [
1 => array_merge(['SU'], array_values(valueList('RG04', null, 'label'))),
2 => valueList('RG02', null, 'label'),
3 => valueList('RG03', null, 'label')
];
debug($blocks);
$gesamtliste = array_merge(
 $blocks[$blockfolge[1]],
 $blocks[$blockfolge[2]],
 $blocks[$blockfolge[3]]
);


setPageOrder($gesamtliste, posttest);
by SoSci Survey (327k points)
Seien Sie so nett, und posten Sie die Debug-Information, die rechts oben aufgeklappt werden kann. Dann sehen wir ja, welche Fragen auf der Seite wo platziert sind und was der Zufallsgenerator ggf. zieht.
by s253424 (200 points)
[Information]    Interview Nummer 344 wird fortgesetzt
[Information]    Der Fragebogen DisSelbstwertTuerk im Projekt erfahrugentuerkeistaemmigr wird verwendet
[Information]    Die Verweildauer auf Seite 1 war 17 Sekunden
[Verarbeitung]    Lese Antworten von Seite 1
[Verarbeitung]    Erstelle Seite 4 in Fragebogen DisSelbstwertTuerk
debug()    Inhalt: 0, 1, 2
debug()    Inhalt:
[1]    [0]SU    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    [10]    [11]    [12]    [13]    [14]    [15]    [16]    [17]    [18]    [19]    [20]    [21]
[2]    [RG02]
[3]    [RG03]
[Inhalt]    Erstelle Frage RG01
[Information]    Vom Zufallsgenerator RG01 wurden folgende Codes gezogen: 1, 3, 2
[Inhalt]    Erstelle Frage RG03
[Information]    Vom Zufallsgenerator RG03 wurden folgende Codes gezogen: 1
[Inhalt]    Erstelle Frage RG02
[Information]    Vom Zufallsgenerator RG02 wurden folgende Codes gezogen: 1
[Inhalt]    Erstelle Frage RG04
[Information]    Vom Zufallsgenerator RG04 wurden folgende Codes gezogen: 7, 13, 4, 12, 15, 18, 9, 21, 11, 3, 5, 20, 17, 14, 8, 16, 1, 10, 6, 2, 19

und schicke Ihnen hier auch mal den pretest Link. Vielleicht hilft das ja.    https://www.soscisurvey.de/erfahrugentuerkeistaemmigr/?act=FGALECbEYdrGwxFbaR3Lj6uG
by SoSci Survey (327k points)
Okay, hier ist das Problem:

debug()    Inhalt: 0, 1, 2

Das kommt (wahrscheinlich?) von dieser Zeile:

$blockfolge = array_values(valueList('RG01'));
debug($blockfolge);

Eigentlich hätte ich ich hier die Zahlen 1 bis 3 erwartet, nicht 0 bis 2. Bitte ergänzen Sie noch ei debug() und berichten Sie nochmal:

debug(valueList('RG01'));
$blockfolge = array_values(valueList('RG01'));
debug($blockfolge);

Abgesehen davon scheint es so, dass Sie die Zufallsgeneratoren erst einbinden nachdem Sie den PHP-Code laufen ließen. Die Zufallsgeneratoren müssen unbedingt oberhalb des PHP-Codes stehen, damit der PHP-Code auf die Ziehung zugreifen kann.
by s253424 (200 points)
Eigentlich hätte ich ich hier die Zahlen 1 bis 3 erwartet, nicht 0 bis 2. Bitte ergänzen Sie noch ei debug() und berichten Sie nochmal:
> ich hab es sowohl mit 0,1,2 als auch mit 1,2,3 probiert und es klappt nicht.
debug(valueList('RG01'));
>  Wenn ich den Befehl (mit und ohne Dollarzeichen) anwende, kann ich den Fragebogen gar nicht öffnen, weil ein Problem vorliegt (in der Zeile 21 also setPageOrder($gesamtliste, posttest).
Abgesehen davon scheint es so, dass Sie die Zufallsgeneratoren erst einbinden nachdem Sie den PHP-Code laufen ließen.
> Das stimmt! Macht Sinn! Das habe ich auch geändert, leider bekomme ich immer noch folgende Fehlermeldungen:
(1) : Fehler im Fragebogen: array_merge(): Argument #3 must be of type array, null given
Zeile: 13

und
Fehler im Fragebogen: Undefined array key ""
Zeile: 16

Zumindest handelt es sich nur noch um die Blockfolge 3?!

Hier die debug Informationen:

[Verarbeitung]    Erstelle Seite 4 in Fragebogen DisSelbstwertTuerk
[Inhalt]    Erstelle Frage RG01
[Information]    Vom Zufallsgenerator RG01 wurden folgende Codes gezogen: 3, 2, 1
[Inhalt]    Erstelle Frage RG04
[Information]    Vom Zufallsgenerator RG04 wurden folgende Codes gezogen: 16, 20, 6, 4, 21, 5, 9, 8, 18, 12, 11, 14, 1, 2, 3, 10, 15, 7, 13, 19, 17
[Inhalt]    Erstelle Frage RG02
[Information]    Vom Zufallsgenerator RG02 wurden folgende Codes gezogen: 1
[Inhalt]    Erstelle Frage RG03
[Information]    Vom Zufallsgenerator RG03 wurden folgende Codes gezogen: 1
debug()    Inhalt: 03, 12, 21
debug()    Inhalt:
[1]    [0]SU    [1]16,    [2]20,    [3]06,    [4]04,    [5]21    [6]05,    [7]09,    [8]08,    [9]18,    [10]12,    [11]11,    [12]14,    [13]01,    [14]02,    [15]03,    [16]10,    [17]15,    [18]07,    [19]13,    [20]19,    [21]17,
[2]    [RG02]SU00
[3]    [RG03]OFF
debug()    Inhalt: 03, 12, 21

Ich bin neugierig: Warum wird mir gesagt, ich solle die Seite 4 oder eben die entsprechenden Fragen erstellen?

Ich frag nochmal vorsichtshalber: Kann es an der Benennung der Variablen innerhalb der Zufallsgeneratoren liegen? Oder daran, dass in RG02 und RG03 jeweils nur 1 Zettel mit 1 Inhalt (eine Seite) sind?
by SoSci Survey (327k points)
> Fehler im Fragebogen: array_merge(): Argument #3 must be of type array, null given

Das ist nur eine Folge des anderen Fehlers, weil PHP im Array $blocks eben keinen Wert "" findet.

> [Information]    Vom Zufallsgenerator RG01 wurden folgende Codes gezogen: 3, 2, 1

Okay, soweit erwartbar.

> debug()    Inhalt: 03, 12, 21

Das ist eigentlich auch gut, das sind 3,2,1 wie oben.

Aber jetzt sehe ich den Fehler. Für die Variable $blockfolge müssen wir die Indizes ab 0 verwenden, nicht ab 1:

$gesamtliste = array_merge(
 $blocks[$blockfolge[0]],
 $blocks[$blockfolge[1]],
 $blocks[$blockfolge[2]]
);

$blockfolge[3] gibt es nicht, weil wir in diesem Array die Indizes 0-2 haben. Entsprechend liefert $blockfolge[3] einen leeren Wert und $blocks[<leerer Wert>] gibt es dann auch nicht.

> Warum wird mir gesagt, ich solle die Seite 4 oder eben die entsprechenden Fragen erstellen?

Sie meinen das hier?

> [Verarbeitung]    Erstelle Seite 4 in Fragebogen DisSelbstwertTuerk

Das ist keine Anweisung (steht ja hinten kein Ausrufezeichen), sondern eine Information, was SoSci im Hintergrund macht. Heißt "Liebe:r Projektleiter:in, ich erstelle jetzt die Seite Nr. 4" - und Abgrezung zum "Vorher habe ich noch die Antworten von Seite 3 eingelesen" und im Unterschied zu "auf Seite 3 hatte eine Antwort gefehlt, ich erstelle jetzt nochmal Seite 3" oder "Ich springe jetzt zur Seite 5".
by s253424 (200 points)
$blockfolge[3] gibt es nicht, weil wir in diesem Array die Indizes 0-2 haben. Entsprechend liefert $blockfolge[3] einen leeren Wert und $blocks[<leerer Wert>] gibt es dann auch nicht

> Das hatte ich auch schon probiert. Wenn ich die Blocks entsprechend (0,1,2) und die blockfolgen auch mit 0,1,2 "beschrifte" wird mir gesagt Blockfolge 1 sei nicht definiert. An Zahlenkombis/ Definitionen habe ich bereits so ungefähr alles probiert.
Wenn ich die Umfrage dann nochmal starte (ohne den Code zu ändern) wird mir gesagt Blockfolge 2 sei nicht erstellt worden.

Hier die entsprechende debug Information:
[Inhalt]    Erstelle Frage RG01
[Information]    Vom Zufallsgenerator RG01 wurden folgende Codes gezogen: 1, 3, 2
[Inhalt]    Erstelle Frage RG04
[Information]    Vom Zufallsgenerator RG04 wurden folgende Codes gezogen: 20, 16, 12, 4, 11, 3, 18, 15, 1, 21, 10, 14, 6, 8, 2, 19, 17, 5, 7, 13, 9
[Inhalt]    Erstelle Frage RG02
[Information]    Vom Zufallsgenerator RG02 wurden folgende Codes gezogen: 1
[Inhalt]    Erstelle Frage RG03
[Information]    Vom Zufallsgenerator RG03 wurden folgende Codes gezogen: 1
debug()    Inhalt: RG01x011, RG01x023, RG32

--> sollte ich mir hier meine einzelnen Variablen anschauen?
debug()    Inhalt:
[0]    [0]SU    [1]20,    [2]16,    [3]12,    [4]04,    [5]11,    [6]03,    [7]18,    [8]15,    [9]01,    [10]21    [11]10,    [12]14,    [13]06,    [14]08,    [15]02,    [16]19,    [17]17,    [18]05,    [19]07,    [20]13,    [21]09,
[1]    [RG02]SU00
[2]    [RG03]OFF
debug()    Inhalt: 01, 13, 22

--> Sagt mir die debug(), dass es ein Problem mit den Inhalten 01,13,22 gibt? Um was für ein "Problem könnte es sich da handeln?

Hier auch nochmal meine Variablenbeschriftung des RG01 (vielleicht liegt da der Fehler):
RG0undefined (1) SU00 (2) OFF (3) SU: Vollständige Leerungen der Urne bisher
Ganze Zahl

RG01x01undefined (1) SU00 (2) OFF (3) SU: Gezogener Code (1)
RG01x02undefined (1) SU00 (2) OFF (3) SU: Gezogener Code (2)
RG3undefined (1) SU00 (2) OFF (3) SU: Gezogener Code (3)
1 = SU, 01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21
2 = SU00
3 = OFF
by SoSci Survey (327k points)
> Sagt mir die debug(), dass es ein Problem mit den Inhalten 01,13,22 gibt? Um was für ein "Problem könnte es sich da handeln?

Kein Problem, alles gut.

Haben Sie die Zahlen 1-3 in diesem besagten Block (und nur dort) auf 0-2 geändert? Welche Fehlermeldung wird dann genau angezeigt und welche Debug-Information?
by s253424 (200 points)
Also bei folgendem Code (also nur unter Blocks 0,1,2 und bei blockfolge 1,2,3)
$blockfolge = array_values(valueList('RG01'));
debug(valueList('RG01'));

$blocks = [
0 => array_merge(['SU'], array_values(valueList('RG04', null, 'label'))),
1 => valueList('RG02', null, 'label'),
2 => valueList('RG03', null, 'label')
];
debug($blocks);
debug($blockfolge);

$gesamtliste = array_merge(
 $blocks[$blockfolge[1]],
 $blocks[$blockfolge[2]],
 $blocks[$blockfolge[3]]
);


setPageOrder($gesamtliste, posttest);
debug(valueList('RG01'));

kommt folgender Fehlercode:
Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: Undefined array key 3
Zeile: 15

PHP-Code

012 debug($blockfolge);
013
014 $gesamtliste = array_merge(
015  $blocks[$blockfolge[1]],
016  $blocks[$blockfolge[2]],
017  $blocks[$blockfolge[3]]
018 );
Fehler im Fragebogen: Undefined array key 3
Zeile: 17

PHP-Code

014 $gesamtliste = array_merge(
015  $blocks[$blockfolge[1]],
016  $blocks[$blockfolge[2]],
017  $blocks[$blockfolge[3]]
018 );
019
020
Fehler im Fragebogen: Undefined array key ""
Zeile: 17

PHP-Code

014 $gesamtliste = array_merge(
015  $blocks[$blockfolge[1]],
016  $blocks[$blockfolge[2]],
017  $blocks[$blockfolge[3]]
018 );
019
020
Fehler im Fragebogen: array_merge(): Argument #1 must be of type array, null given
Zeile: 14

PHP-Code

011 debug($blocks);
012 debug($blockfolge);
013
014 $gesamtliste = array_merge(
015  $blocks[$blockfolge[1]],
016  $blocks[$blockfolge[2]],
017  $blocks[$blockfolge[3]]

und folgende debug Information:
[Inhalt]    Erstelle Frage RG01
[Information]    Vom Zufallsgenerator RG01 wurden folgende Codes gezogen: 1, 3, 2
[Inhalt]    Erstelle Frage RG04
[Information]    Vom Zufallsgenerator RG04 wurden folgende Codes gezogen: 16, 17, 10, 8, 4, 20, 2, 6, 19, 1, 18, 15, 11, 3, 21, 7, 12, 5, 14, 13, 9
[Inhalt]    Erstelle Frage RG02
[Information]    Vom Zufallsgenerator RG02 wurden folgende Codes gezogen: 1
[Inhalt]    Erstelle Frage RG03
[Information]    Vom Zufallsgenerator RG03 wurden folgende Codes gezogen: 1
debug()    Inhalt: RG01x011, RG01x023, RG32
debug()    Inhalt:
[0]    [0]SU    [1]16,    [2]17,    [3]10,    [4]08,    [5]04,    [6]20,    [7]02,    [8]06,    [9]19,    [10]01,    [11]18,    [12]15,    [13]11,    [14]03,    [15]21    [16]07,    [17]12,    [18]05,    [19]14,    [20]13,    [21]09,
[1]    [RG02]SU00
[2]    [RG03]OFF
debug()    Inhalt: 01, 13, 22

Wenn ich bei blocks () 1,2,3 (statt 0,1,2) und bei blockfolge () 1,2,3  habe, kommt folgender Fehlercode:
Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: Undefined array key 3
Zeile: 17

PHP-Code

014 $gesamtliste = array_merge(
015  $blocks[$blockfolge[1]],
016  $blocks[$blockfolge[2]],
017  $blocks[$blockfolge[3]]
018 );
019
020
Fehler im Fragebogen: Undefined array key ""
Zeile: 17

PHP-Code

014 $gesamtliste = array_merge(
015  $blocks[$blockfolge[1]],
016  $blocks[$blockfolge[2]],
017  $blocks[$blockfolge[3]]
018 );
019
020
Fehler im Fragebogen: array_merge(): Argument #3 must be of type array, null given
Zeile: 14

PHP-Code

011 debug($blocks);
012 debug($blockfolge);
013
014 $gesamtliste = array_merge(
015  $blocks[$blockfolge[1]],
016  $blocks[$blockfolge[2]],
017  $blocks[$blockfolge[3]]



und folgende debug Information:

Debug-Information für valueList('RG01'):
RG01x013, RG01x022, RG31
Hinweis (Seite 4)
Debug-Information für $blocks:
[1]    [0]SU    [1]17,    [2]14,    [3]11,    [4]13,    [5]07,    [6]12,    [7]02,    [8]15,    [9]10,    [10]21    [11]08,    [12]04,    [13]05,    [14]03,    [15]19,    [16]01,    [17]20,    [18]16,    [19]09,    [20]18,    [21]06,
[2]    [RG02]SU00
[3]    [RG03]OFF

Hinweis (Seite 4)
Debug-Information für $blockfolge:
03, 12, 21


Wenn ich Blocks und Blockfolge mit 0,1,2 bestimme, dann kommt folgender Fehlercode:
Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: Undefined array key 3
Zeile: 16

PHP-Code

013
014 $gesamtliste = array_merge(
015  $blocks[$blockfolge[0]],
016  $blocks[$blockfolge[1]],
017  $blocks[$blockfolge[2]]
018 );
019
Fehler im Fragebogen: array_merge(): Argument #2 must be of type array, null given
Zeile: 14

PHP-Code

011 debug($blocks);
012 debug($blockfolge);
013
014 $gesamtliste = array_merge(
015  $blocks[$blockfolge[0]],
016  $blocks[$blockfolge[1]],
017  $blocks[$blockfolge[2]]

(Ich hab tatsächlich auch probiert die Blocks mit 1,2,3 und die Blockfolge mit 0,1,2 zu bestimmen, dann bekomme ich wie gesagt folgende Fehlermeldung: Beim Erstellen der Fragebogen-Seite ist ein Fehler aufgetreten. Es wäre sehr freundlich, wenn Sie den Projektleiter über das Problem informieren und die Fehlermeldung unten weiterleiten. Herzlichen Dank.
Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: Uncaught Error: Undefined constant "s2survey\questionnaire\environment\posttest" in /var/www/s2survey/html/s2survey/phpcode/PHPCodeExecutor.php(547) : eval()'d code:21 Stack trace: #0 /var/www/s2survey/html/s2survey/phpcode/PHPCodeExecutor.php(547): eval() #1 /var/www/s2survey/html/s2survey/questionnaire/php/PHPCodeExecutorQnr.php(71): s2survey\phpcode\PHPCodeExecutor->runCode() #2 /var/www/s2survey/html/inc/QuestionnairePHP.php(573): s2survey\questionnaire\php\PHPCodeExecutorQnr->runCode() #3 /var/www/s2survey/html/s2survey/questionnaire/QuestionnaireElement.php(480): QuestionnairePHP->runElement() #4 /var/www/s2survey/html/s2survey/questionnaire/QnrPage.php(1565): s2survey\questionnaire\QuestionnaireElement->run() #5 /var/www/s2survey/html/s2survey/questionnaire/QnrPage.php(1484): s2survey\questionnaire\QnrPage->runContent() #6 /var/www/s2survey/html/inc/InterviewCase.php(1490): s2survey\questionnaire\QnrPage->run() #7 /var/www/s2survey/html/inc/Interviewer.php(655): InterviewCase->createQuestionnairePage() #8 /var/www/s2survey/html/inc/Interviewer.php(824): Interviewer->handleCreate() #9 /var/www/s2survey/html/inc/Interviewer.php(1948): Interviewer->handleInterview() #10 /var/www/s2survey/html/erfahrugentuerkeistaemmigr/index.php(4): Interviewer::run() #11 {main} thrown
Zeile: 21

PHP-Code

018 );
019
020
021 setPageOrder($gesamtliste, posttest);
022 debug(valueList('RG01'));
023 return 'ok';

)

Sollte ich vielleicht doch die shuffle Funktion ausprobieren? :)
by SoSci Survey (327k points)
Sie haben die Indizes genau an den falschen Stellen geändert. In der Definition des Arrays müssen Sie 1 bis 3 verwenden (entsprechend den Codes im Zufallsgenerator) im zweiten Block muss es 0 bis 2 sein.

$blocks = [
  1 => array_merge(['SU'], array_values(valueList('RG04', null, 'label'))),
  2 => valueList('RG02', null, 'label'),
  3 => valueList('RG03', null, 'label')
];
debug($blocks);
debug($blockfolge);

$gesamtliste = array_merge(
 $blocks[$blockfolge[0]],
 $blocks[$blockfolge[1]],
 $blocks[$blockfolge[2]]
);
by s253424 (200 points)
Vielen vielen Dank für die Antwort & die Geduld! Ich wünsch noch einen schönen Tag!
by s253424 (200 points)
Hallo (leider) nochmal!
Mir ist zufällig etwas ungünstiges beim Pretest aufgefallen, das für mich gleichermaßen speziell ist und sicherlich mit der eingestellten Rotation zu tun hat.

Folgendes: Alle meine Fragen sind so eingestellt, dass sie nicht Pflicht sind, aber bei fehlenden Antworten nachgehakt wird.

Wenn die Fragen von RG02 oder RG03 an  (1) 1. Stelle angefragt werden  und (2) die Fragen nicht vollständig beantwortet werden, bekommt man zwar die Erinnerung, dass alles beantwortet werden muss, aber wenn man angibt keine weiteren Angaben machen möchte, bekommt man die gleichen Fragen nochmal angezeigt. Also wenn RG02 an 1. Position, RG03 an 2. Position und RG04 and 3. Position, dann liegt das Problem nur bei RG02 vor. Wenn RG03 an 1. Position ist, dann liegt das Problem auch nur bei RG03 vor. Wenn RG04 (mit fester Seite 'SU' am Anfang), dann liegt das Problem bei keinem der Fragen vor. Ich nehme also an, dass der Ursprung des Problems in der Kombi von Blöcken und Blockabfolgen liegt.
Das ist ziemlich wichtig, da wir datenschutzrechtlich keine Pflichtfragen haben dürfen, aber hohe Missings erwarten.
Hier auch der Link zum Pretest  https://www.soscisurvey.de/erfahrugentuerkeistaemmigr/?act=0AyMiYkxA3THDAXpWBY9KPRh
by SoSci Survey (327k points)
Prüfen Sie bitte, ob Sie um die betroffenen Fragen herum Seiten haben, die keine Inhalte zeigen. Also z.B. eine Seite, die nur PHP-Code beinhaltet, aber selbst keine Fragen und keinen Text zeigt. Dies kann in Verbindung mit setPageOrder() und der Antwortpflicht zu dem beschriebenen Problem führen.

In aller Regel reicht es, wenn man diese "Seiten ohne sichtbaren Inhalt" dann einfach mit der folgenden Seite zusammenführt.
by s253424 (200 points)
Okay, also ich habe bereits eine 'posttest' Seite nach der gesamten Rotation.
Wenn ich eine leere Seite zwischen den Frageblöcken mit leerem php code hinzufüge, besteht das Problem weiterhin.

Ich dachte, ich kann den Befehl setPageOrder() nicht mehrmals verwenden?

In aller Regel reicht es, wenn man diese "Seiten ohne sichtbaren Inhalt" dann einfach mit der folgenden Seite zusammenführt.
> Was meinen Sie mit "zusammenführen?
by SoSci Survey (327k points)
> Wenn ich eine leere Seite zwischen den Frageblöcken mit leerem php code hinzufüge, besteht das Problem weiterhin.

Ich habe mich missverständlich ausgedrückt: Das Problem entsteht durch leere Seiten. Wenn Sie z.B. eine Seite wie folgt in einem Ihrer Blöcke verwenden:

if (value('AB01') == 1) {
  show('BC01');
}

Dann würde diese Seite entweder die Frage BC01 zeigen oder eben nicht. Und in dem "eben nicht" Fall würde das beschriebene Probleme entstehen, wenn auf der folgenden Seite (evtl. auch später) eine Frage mit Antwortpflicht erscheint.

Bitte prüfen Sie als erstes alle Seiten, ob auf einigen Seiten nur PHP-Code steht und sonst keine Elemente auf die Seite gezogen sind. Und prüfen Sie auf diesen Seiten, ob der PHP-Code Inhalte (Fragen/Texte) zeigt oder nicht?

Die Seiten, wo nichts gezeigt wird, und wo SoSci Survey direkt zur nächsten Seite springt (wird in der Debug-Information angezeigt) sind die Ursache für das von Ihnen beschriebene Problem.
by s253424 (200 points)
Okay, ich habe keine leeren Seiten mehr
mein php code ist wie folgt:

$blockfolge = array_values(valueList('RG01'));


$blocks = [
1 => array_merge(['SU'], array_values(valueList('RG04', null, 'label'))),
2 => valueList('RG02', null, 'label'),
3 => valueList('RG03', null, 'label')
];


$gesamtliste = array_merge(
 $blocks[$blockfolge[0]],
 $blocks[$blockfolge[1]],
 $blocks[$blockfolge[2]]
);


setPageOrder($gesamtliste, 'IDENT');
und die Seite 'IDENT' hat auch Inhalte und enthält keinen php code.


Die Debug Informationen erscheinen ja in der Version wo RG04 am Anfang steht und ich bin den Fragebogen nun durchgegangen und habe mir parallel die Debug Informationen angeschaut und nichts auffälliges gefunden
by SoSci Survey (327k points)
Die Debug-Information (rechts oben) sollte eigentlich auf jeder Seite sichtbar sein?!

Okay, Sie hatten oben geschrieben, das Problem trete auf, wenn RG02 oder RG03 am Anfang kommen.  Das können Sie zum Testen durch folgende Ergänzung erzwingen:

$blockfolge = array_values(valueList('RG01'));
$blockfolge = [2,3,1];

Könnte es sein, dass auf der Seite mit der Blockfolge/dem obigen PHP-Code sonst nichts mehr steht, dass diese Seite also nichts anzeigt? Wenn ja, dann packen Sie den PHP-Code testweise mal auf die vorige Seite.
by s253424 (200 points)
Könnte es sein, dass auf der Seite mit der Blockfolge/dem obigen PHP-Code sonst nichts mehr steht, dass diese Seite also nichts anzeigt? Wenn ja, dann packen Sie den PHP-Code testweise mal auf die vorige Seite.
-> Ja. Ich hab es jetzt auf die vorherige Seite und auch die davor gepackt. Das Problem:
Die vorherige Seite ist eine Seite (S.3), die nur erscheint, wenn die Einwilligungserklärung auf Seite 2 mit "nein" beantwortet wurde. Wenn ich den php code auf Seite 3 packe, (und vorher mit "ja" gestimmt wurde) funktioniert der Code nicht. Wenn ich ihn auf S. 2 packe funktioniert die Randomisierung perfekt (eben auch ohne, dass RG02 und RG03 nochmal abgefragt werden) aber dann funktioniert der Filter nicht mehr. Das sind alles wesentliche Elemente des Fragebogens, sodass ich da ziemlich unflexibel in der Gestaltung bin.
Wenn es wirklich nicht anders geht würde ich eine Seite mit einer Frage (ohne Filter) hinzufügen. Aber wie gesagt, nur wenn es nicht anders geht.
by SoSci Survey (327k points)
Okay, ich sehe das Problem :D

Die  einfachste Lösung bestünde darin, dass nach der Einwilligungsfrage eine Seite mit Eisbrecherfrage kommt. Das wäre für eine gute Teilnehmerführung ohnehin keine schlechte Idee.

Die deutlich kompliziertere Lösung würde den Screenout bei nicht-Zustimmung als PHP-Code auf jede erste Block-Seite setzen. Oder unter PHP-Funktionen eine solche Funktion definieren und diese dann auf jeder der drei Block-Start-Seiten aufrufen.

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

...