0 votes
ago in SoSci Survey (dt.) by s296412 (110 points)

Hallo zusammen :)

eine ähnliche Frage wurde bereits gestellt, allerdings hat die Antwort für meinen Fall nicht geholfen:

Per Zufallsgenerator werden meinen Teilnehmenden insgesamt 40 Text-Rating-Kombinationen gezeigt (aus einem Pool von über 200 Kombis).
Das funktioniert so, dass auf einer Seite ein Item steht (z. B. „Ich bin groß“) und direkt danach auf der nächsten Seite ein Rating zu diesem Item mit mehreren Fragen folgt.

Nun möchte ich gerne erreichen, dass z. B. immer auf der 30. Rating-Seite zusätzlich am Ende ein Attention-Check (Frage AT06) angezeigt wird – also zusätzlich zu den Ratingfragen auf dieser Seite, nicht als eigene Seite.

Mein aktueller PHP-Code für die zufällige Auswahl und Reihenfolge sieht so aus und funktioniert auch:


 if (!isset($pagesALL)) {
    question('RD01');  // Zettel in zufälliger Reihenfolge ziehen
    $pagesN = valueList('RD01', NULL, 'label');  // Gezogene Zettel auslesen
    question('RD02');  // Zettel in zufälliger Reihenfolge ziehen
    $pagesP = valueList('RD02', NULL, 'label');  // Gezogene Zettel auslesen
    $pagesALL = array_merge($pagesN, $pagesP);
    shuffle($pagesALL);
    registerVariable($pagesALL); // Reihenfolge zwischenspeichern, um spätere Änderung zu vermeiden
    }
    setPageOrder($pagesALL, 'AbFragI');  // Seiten als Seitenabfolge definieren

Meine Frage ist also:
Wie kann ich dafür sorgen, dass eine bestimmte Frage (AT06) innerhalb einer zufällig gezogenen Rating-Seite zusätzlich angezeigt wird?

Vielen Dank im Voraus!

1 Answer

0 votes
ago by SoSci Survey (355k points)
edited ago by SoSci Survey

Ihrem Code entnehme ich, dass Sie nicht willkürlich aus 200 Codes ziehen, sondern aus zwei Sets, und dass Sie diese Ziehungen anschließend mittels shuffle() mischen. Soweit korrekt?

In diese Liste können Sie im Prinzip recht einfach weitere Elemente einfügen:

$pagesALL = array_merge($pagesN, $pagesP);
array_splice($pagesALL, 29, 0, ['AT06']);

Das Element Nr. 30 hat den Index 29, an dieser Stellen würde der o.g. Code das Element 'AT06' einfügen.

Ob setPageOrder() in Ihrem Kontext wirklich Sinn ergibt, weiß ich nicht, weil Sie ja über "Fragen" schreiben, und für 200 Fragen hoffentlich nicht 400 Seiten angelegt haben... Mittels loopToPage() lässt sich das mit 2 Seiten lösen.

Ergänzung

Sie sollten außerden mittels array_values() die Schlüssel (=Variablennamen) entfernen, die valueList() liefert, also:

if (!isset($pagesALL)) {
    question('RD01');  // Zettel in zufälliger Reihenfolge ziehen
    $pagesN = array_values(valueList('RD01', NULL, 'label'));
    question('RD02');  // Zettel in zufälliger Reihenfolge ziehen
    $pagesP = array_values(valueList('RD02', NULL, 'label'));
    $pagesALL = array_merge($pagesN, $pagesP);
    shuffle($pagesALL);
    array_splice($pagesALL, 29, 0, ['AT06']);
    registerVariable($pagesALL);
}
setPageOrder($pagesALL, 'AbFragI');
ago by s296412 (110 points)
Vielen Dank für die schnelle Rückmeldung!

Es wurden tatsächlich ca. 400 Seiten im Fragebogen angelegt. Ich selbst habe den Code nicht programmiert, sondern führe eine Replikation durch, bei der das ursprüngliche Design übernommen wurde.
RD01 und RD02 sind Zufallsgeneratoren und ziehen jeweils aus vorbereiteten Sets (z. B. NK1001 – NK1001a), wobei NK1001 die Seite mit dem Gedanken ist und NK1001a die dazugehörige Seite mit den Ratingfragen (auf dieser Seite werden per PHP-Code mehrere Fragen aufgerufen).

Den Hinweis mit array_splice habe ich ausprobiert, allerdings funktioniert das in meinem Setting leider nicht: Wenn ich den Code wie vorgeschlagen einfüge, springt die Befragung direkt zur Seite 'AbFragI', ohne die restlichen Seiten (die in pagesALL gespeichert sind) durchzugehen.

Haben Sie vielleicht noch einen Tipp, wie ich in dieser Konstellation (mit den vielen einzeln angelegten Seiten) am besten einen Attention-Check wie AT06 auf einer der Ratingseiten einbinden kann?

Vielen Dank nochmal für Ihre Unterstützung!
ago by SoSci Survey (355k points)
> Wenn ich den Code wie vorgeschlagen einfüge, springt die Befragung direkt zur Seite 'AbFragI', ohne die restlichen Seiten (die in pagesALL gespeichert sind) durchzugehen.

Haben Sie denn in array_splice() statt 'AT06' eine gültige Seitenkennung eingetragen, und zwar von der Seite, welche den Attention Check beinhaltet?

Wenn ja, was zeigt denn die Debug-Information der Seite?
ago by s296412 (110 points)
Ja das habe ich gemacht.

Die Debug-Seite sieht so aus:

[Information]    Interview gestartet (neue Nummer 119)
[Information]    Der Fragebogen Belief-Study im Projekt COGNEMO_rep wird verwendet
[Verarbeitung]    Erstelle Seite 14 in Fragebogen Belief-Study
[Inhalt]    Erstelle Frage RD01
[Information]    Vom Zufallsgenerator RD01 wurden folgende Codes gezogen: 106, 8, 89, 50, 5, 6, 79, 12, 64, 99, 43, 15, 91, 23, 74, 102, 25, 39, 80, 105
[Information]    valueList(RD01) = Array [RD01x01:NK1106-NK1106a, RD01x02:NK1008-NK1008a, RD01x03:NK1089-NK1089a, ...]
[Inhalt]    Erstelle Frage RD02
[Information]    Vom Zufallsgenerator RD02 wurden folgende Codes gezogen: 13, 101, 87, 75, 19, 95, 15, 72, 26, 20, 99, 73, 36, 33, 98, 29, 54, 4, 60, 2
[Information]    valueList(RD02) = Array [RD02x01:PK2013-PK2013a, RD02x02:PK2101-PK2101a, RD02x03:PK2087-PK2087a, ...]
[Information]    Entsprechend setPageOrder() werden nun folgende Seiten gezeigt:
486 [AbFragI]
[Information]    Die Seite zeigt keine Inhalte, automatisch weiter mit Seite Nr. 486
[Verarbeitung]    Erstelle Seite 486 in Fragebogen Belief-Study
[Inhalt]    Erstelle Frage VA06


bis valueList(RD02) wird alles entsprechend ausgeführt, wie es ohne array_splice vorher funktioniert hat. Aber ohne array_splice wird folgendes ausgeführt:
 
[Information]    Entsprechend setPageOrder() werden nun folgende Seiten gezeigt:
242 [NK1113], 243 [NK1113a], 376 [PK2063], 377 [PK2063a], 50 [NK1017], 51 [NK1017a], 394 [PK2072], 395 [PK2072a], 336 [PK2043], 337 [PK2043a], 282 [PK2016], 283 [PK2016a], 234 [NK1109], 235 [NK1109a], 450 [PK2100], 451 [PK2100a], 296 [PK2023], 297 [PK2023a], 478 [PK2114], 479 [PK2114a], 308 [PK2029], 309 [PK2029a], 318 [PK2034], 319 [PK2034a], 402 [PK2076], 403 [PK2076a], 276 [PK2013], 277 [PK2013a], 54 [NK1019], 55 [NK1019a], 226 [NK1105], 227 [NK1105a], 176 [NK1080], 177 [NK1080a], 188 [NK1086], 189 [NK1086a], 174 [NK1079], 175 [NK1079a], 430 [PK2090], 431 [PK2090a], 274 [PK2012], 275 [PK2012a], 354 [PK2052], 355 [PK2052a], 260 [PK2005], 261 [PK2005a], 382 [PK2066], 383 [PK2066a], 58 [NK1021], 59 [NK1021a], 140 [NK1062], 141 [NK1062a], 180 [NK1082], 181 [NK1082a], 156 [NK1070], 157 [NK1070a], 306 [PK2028], 307 [PK2028a], 120 [NK1052], 121 [NK1052a], 328 [PK2039], 329 [PK2039a], 36 [NK1010], 37 [NK1010a], 116 [NK1050], 117 [NK1050a], 106 [NK1045], 107 [NK1045a], 206 [NK1095], 207 [NK1095a], 46 [NK1015], 47 [NK1015a], 362 [PK2056], 363 [PK2056a], 118 [NK1051], 119 [NK1051a], 390 [PK2070], 391 [PK2070a], 64 [NK1024], 65 [NK1024a], 486 [AbFragI]
[Information]    Die Seite zeigt keine Inhalte, automatisch weiter mit Seite Nr. 242
[Verarbeitung]    Erstelle Seite 242 in Fragebogen Belief-Study
ago by SoSci Survey (355k points)
Ich hatte die Verwendung des Befehls array_slice() falsch angegeben. Und und zwar liefert dieser nicht das geänderte Array zurück, sondern die (hier nicht) entfernten Elemente.

Es muss also das $pagesALL = davor weg. Ich habe das oben in der Antwort entsprechend korrigiert.

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

...