0 votes
in SoSci Survey (dt.) by s047711 (250 points)
edited by SoSci Survey

Liebes SoSciSur-Team,

ich möchte die Reihenfolge der Darstellung von Items auf einer Seite zufällig variieren lassen, und zwar folgendermaßen:
Dabei sollen jeweils 3 Items in einem von 3 Blöcken erhalten bleiben. Innerhalb des Blocks soll die Reihenfolge variiert werden. Ebenso soll die Abfolge der 3 Fragenblöcke variiert werden.
Ich habe einen Code, der aber nicht funktioniert. Stattdessen wird immer nur der eine Fragenblock angezeigt (also nur 3 von 9 Fragen). Woran könnte es liegen?

$blocks = array(
  array(1,2,3)
);
for ($i=0; $i<count($blocks); $i++) {
  shuffle($blocks[$i]);
}
shuffle($blocks);
$items = array();
for ($i=0; $i<count($blocks); $i++) {
  $items = array_merge($items, $blocks[$i]);
}
question('NF17', $items);

Viele Grüße

by SoSci Survey (302k points)
Ich verstehe die Situation noch nicht ganz vollständig. Wie viele Fragen (mit welchem Fragetyp) und wie viele Items (innerhalb der Fragen) haben Sie angelegt?
by s047711 (250 points)
Der Fragetyp ist Skala (Zwischenwerte beschriftet).
Es handelt sich um insgesamt 6 Fragen und das Prinzip soll jedes bei jeder Frage das oben beschriebene sein.

Es sind 3 Blöcke (1-3) à 3 Items (sagen wir a-c), also insgesamt 9 Items.  Die Blöcke sollen erhalten bleiben, aber innerhalb der Blöcke soll die Reihenfolge gemischt werden (also z. B. 1a, 1c, 1b; 2c, 2a, 2b...). Die Reihenfolge der Blöcke soll auch gemischt werden, also z. B. 2a, 2c, 2b; 3b, 3a, 3c usw.

1 Answer

0 votes
by SoSci Survey (302k points)

Es sind 3 Blöcke (1-3) à 3 Items

Ich verstehe das nun so, dass innerhalb einer Frage (Skala) jeweils 9 Items sind. Ich behandle das deshalb exemplarisch für eine Frage.

Legen wir für die 3x3=9 Items eine geeignete Datenstruktur an:

$items = [
  [1,2,3],
  [4,5,6],
  [7,8,9]
];

Das Mischen können wir aus dieser Anleitung übernehmen.

// Jeden Block in sich mischen
for ($i=0; $i<count($items); $i++) {
  shuffle($items[$i]);
}
 
// Das übergeordnete Array mischen
shuffle($items);

Dieses verschachtelte Array müssen wir noch "ebnen":

$itemlist = [];
foreach ($items as $teilliste) {
  $itemliste = array_merge($itemliste, $teilliste);
}

Und schon haben wir ein entsprechend gemischtes Array, das wir verwenden können.

question('NF17', $itemliste);

Je nachdem, ob dieselbe Reihenfolge auch beim Neu-Laden der Seite oder für andere Fragen erhalten bleiben/verwendet werden soll, ist noch ein registerVariable() und isset() erforderlich: isset()

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

...