0 votes
ago in SoSci Survey (dt.) by u010398 (425 points)
edited ago by SoSci Survey

Hallo,
ich habe eine Skala, bei der ich die Items randomisiert über mehrere Seiten präsentieren möchte und habe das bereits anglegt mit der Hilfestellung und es funktioniert. Nun würde ich aber gerne die ersten zwei Items in fester Reihenfolge präsentieren und erst alle anderen items ab Item 3 randomisieren. Ich konnte dafür keine Hilfestellung finden.
Wie kann ich einzelne Items aus der Randomisierung bei Rotation über mehrere Seiten ausnehmen?

Das ist mein bisheriger Code. Wie kann ich un dafür sorgen, dass Item AE01_01 als erstes präsentiert wird?

// Das isset() vermeidet, dass die Rotation etwa wg. fehlenden Antworten verändert wird
if (!isset($itemsAE01)) {
  // Alle Items der Frage AE01 auflisten
  $itemsAE01 = getItems('AE01', 'all');
  // Liste Mischen
  shuffle($itemsAE01);
  // Die Liste in Teillisten à 10 Items teilen
  $itemsAE01 = array_chunk($itemsAE01, 10);
  // Die Variable für andere Seiten verfügbar machen
  registerVariable($itemsAE01);
}
// Erste Seite
question('AE01', $itemsAE01[0]);

1 Answer

+1 vote
ago by SoSci Survey (337k points)

Im Prinzip müssen Sie die ersten beiden Items nur aus der Liste nehmen.

$itemsAE01 = getItems('AE01', 'all');
$itemsAE01 = array_diff($itemsAE01, [1,2]);

Und am Ende fügen Sie sie dann wieder hinzu:

shuffle($itemsAE01);
$itemsAE01 = array_merge([1,2], $itemsAE01);

Gesamt also

// Das isset() vermeidet, dass die Rotation etwa wg. fehlenden Antworten verändert wird
if (!isset($itemsAE01)) {
  // Alle Items der Frage AE01 auflisten
  $itemsAE01 = getItems('AE01', 'all');
  // Die ersten beiden Items herausnehmen
  $itemsAE01 = array_diff($itemsAE01, [1,2]);
  // Liste Mischen
  shuffle($itemsAE01);
  // Die ersten beiden Items wieder ergänzen
  $itemsAE01 = array_merge([1,2], $itemsAE01);
  // Die Liste in Teillisten à 10 Items teilen
  $itemsAE01 = array_chunk($itemsAE01, 10);
  // Die Variable für andere Seiten verfügbar machen
  registerVariable($itemsAE01);
}
// Erste Seite
question('AE01', $itemsAE01[0]);
ago by u010398 (425 points)
Prima, hat super geklappt. Viele Dank für die schnelle Hilfe. :)
ago by u010398 (425 points)
Noch eine weitere Frage: Ich habe nun noch ein Aufmerksamkeitscheck item, welches an einer ganz bestimmten Position angezeigt werde soll. Also zB. im dritten 10er Päckchen an 5. Stelle. Oder genau nach der Hälfte der Items.  Wenn ich jetzt dieses Item wie oben aus der Randomisierung ausnehme, wird es an dritter Stelle präsentiert. Gäbe es da noch eine Möglichkeit, dieses Items aus der Randomisierung auszunehmen, aber zB zu sagen, es soll an Position 25 präsentiert werden? Könnte ich das mit array_slice machen? Ich hatte das mal mit Seiten umgesetzt, weil ich in der Mitte von randomisierten Seiten eine Seite Pause eingebaut hab, mir ist aber nicht ganz klar, wie ich das in dem Fall umsetzen könnte, wenn es ein Item innerhalb einer Skala betrifft.
ago by SoSci Survey (337k points)
>  Also zB. im dritten 10er Päckchen an 5. Stelle.

Ich würde von der Komplett-Abfolge ausgehen, das ist ein wenig einfacher im Handling. Das Dritte Päckchen sind die Indizes 20-29 und die fünfte Stelle wäre dann Index 24. Dort kann man mittels array_splice() etwas einfügen, hier z.B. das Item 3:

shuffle($itemsAE01);
$itemsAE01 = array_merge([1,2], $itemsAE01);
array_splice($itemsAE01, 24, 0, [3]);

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

...