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

Ich möchte alle Items einer Kategorie (insgesamt 28 Stück) auf 4 Seiten mit jeweils 7 Items verteilen.

// Das isset() vermeidet, dass die Rotation etwa wg. fehlenden Antworten verändert wird
if (!isset($itemsMI)) {
  // Alle Items der Frage MI03 auflisten
  $itemsMI = getItems('MI03', 'all');
  // Liste Mischen
  shuffle($itemsMI);
  // Die Liste in Teillisten à 7 Items teilen
  $itemsMI = array_chunk($itemsMI, 7);
  // Die Variable für andere Seiten verfügbar machen
  registerVariable('itemsMI');
}
question('MI03', $itemsMI[0]);
for ($i=0; $i<count($itemsMI); $i++) {
 $id = id('MI01', $i + 1);
 put($id, $itemsMI[$i]); 
}

Für die 3 folgenden Seiten verwende ich:

question('MI03', $itemsMI[1]);

question('MI03', $itemsMI[2]);

question('MI03', $itemsMI[3]);

Die zufällige Reihenfolge möchte ich speichern. Verwende ich put() erscheint folgende Fehlermeldung:

"Sie versuchen gerade, mit put() ein Array (also mehrere Werte) abzuspeichern. put() speichert aber nur einzelne Texte und Zahlen."

Kann mir bitte jemand den korrekten PHP-Code nennen? Oder gar den Fehler in meinem bisherigen Code bzw. einen einfacheren Weg?

Vielen Dank vorab!
Liebe Grüße

in SoSci Survey (dt.) by s091357 (185 points)
edited by SoSci Survey

1 Answer

0 votes

Die Fehlermeldung rührt daher, dass Sie die Schleife mit put() nach dem array_chunk() verwenden - denn an dieser Stelle wird das "flache" Array zu einem verschaltelten Array - also vier Arrays à 7 Elementen. Versuchen Sie es wie folgt:

// Das isset() vermeidet, dass die Rotation etwa wg. fehlenden Antworten verändert wird
if (!isset($itemsMI)) {
  // Alle Items der Frage MI03 auflisten
  $items = getItems('MI03', 'all');
  // Liste Mischen
  shuffle($items);
  // Abfolge speichern
  for ($i=0; $i<count($items); $i++) {
    $id = id('MI01', $i + 1);
    put($id, $items[$i]); 
  }
  // Die Liste in Teillisten à 7 Items teilen
  $itemsMI = array_chunk($items, 7);
  // Die Variable für andere Seiten verfügbar machen
  registerVariable('itemsMI');
}
question('MI03', $itemsMI[0]);
by SoSci Survey (82.1k points)
Vielen Dank für die Antwort. Leider klappt das Speichern der Reihenfolge nach wie vor nicht. Woran kann es nur liegen?
Wenn Sie eine (sofern vorhanden) Fehlermeldung und die Debug-Information der Seite mitteilen, kann ich darauf gerne qualifiziert antworten.
Soeben ist der Knoten geplatzt =)
Hier der funktionierende php-Code nach Umtausch der Zeilen id und put:

// Das isset() vermeidet, dass die Rotation etwa wg. fehlenden Antworten verändert wird
if (!isset($itemsMI)) {
  // Alle Items der Frage MI03 auflisten
  $itemsMI = getItems('MI03', 'all');
  // Liste Mischen
  shuffle($itemsMI);
  // Abfolge speichern
  for ($i=0; $i<count($itemsMI); $i++) {
    $id = id('MI01', $itemsMI[$i]);
    put($id, $i + 1);
  }
  // Die Liste in Teillisten à 7 Items teilen
  $itemsMI = array_chunk($itemsMI, 7);
  // Die Variable für andere Seiten verfügbar machen
  registerVariable('itemsMI');
}
question('MI03', $itemsMI[0]);

Vielen Dank für Ihre Hilfe!!!
Die Frage ist, ob Sie das Item pro Anzeigeposition (obiger Code) oder die Ränge/Positionen pro Item (Ihre Modifikation) speichern möchten. Wenn's jetzt wunschgemäß klappt: Sehr schön :)
...