0 votes
in SoSci Survey (dt.) by s184821 (120 points)
edited by SoSci Survey

Hallo,

Ich habe 2 Rubriken (PK, KE) erstellt. PK hat 3 Fragen (PK01, PK02, PK03), KE nur 1 (KE01).
Nun möchte ich gern alle dazugehörigen Items zufällig mischen. Pro Seite sollen 20 Items sein und oben drüber immer die Skala von 1-6 & Fragestellung (Alles hat die selbe Skala/Fragestellung).
Dafür habe ich folgenden PHP-Code verwendet:

if (!isset($itemBlocks)) {
  $questions = ['PK01', 'PK02', 'PK03', 'KE01'];
  // Liste mit allen Items erstellen
  $items = [];
  foreach ($questions as $qstID) {
    $qstItems = getItems($qstID, 'all');
    foreach ($qstItem as $itemID) {
      $items[] = [$qstID, $itemID];
    }
  }
  // Liste mischen
  shuffle($items);
 
  // Liste aufteilen
  $itemBlocks = array_chunk($items,20);
  registerVariable($itemBlocks);
}
 
// Auf mehreren Seiten präsentieren
$i = loopPage(count($itemBlocks));
 
// Fragetext anzeigen
question('PK01', 'spacing=0', 'show-items=no');
 
// Items anzeigen
$items = $itemBlocks[$i];
foreach ($items as $item) {
  question($item[0], [$item[1]], 'spacing=0', 'show-title=no', 'show-explanation=no');
}

Dort bekomme ich aber folgende Fehlermeldungen:

-Fehler im Fragebogen: Invalid argument supplied for foreach()
Zeile: 9

PHP-Code

006   $items = [];
007   foreach ($questions as $qstID) {
008     $qstItems = getItems($qstID, 'all');
009     foreach ($qstItem as $itemID) {
010       $items[] = [$qstID, $itemID];
011     }
012   }
Fehler im Fragebogen: Die PHP-Variable $qstItem wurde verwendet, in diesem PHP-Code aber noch nicht definiert (sie enthält noch keinen Wert).
-Fehler im Fragebogen: Undefined offset: 0
Zeile: 28

PHP-Code

025 question('PK01', 'spacing=0', 'show-items=no');
026  
027 
028 $items = $itemBlocks[$i];
029 foreach ($items as $item) {
030   question($item[0], [$item[1]], 'spacing=0', 'show-title=no', 'show-explanation=no');
031 }


-Fehler im Fragebogen: Invalid argument supplied for foreach()
Zeile: 29

PHP-Code

026  
027 
028 $items = $itemBlocks[$i];
029 foreach ($items as $item) {
030   question($item[0], [$item[1]], 'spacing=0', 'show-title=no', 'show-explanation=no');
031 }
032 return 'ok';

Kann mir da jemand weiterhelfen, was ich da ändern muss?
Ich komme leider wirklich nicht weiter..

1 Answer

0 votes
by SoSci Survey (302k points)

Die Fehlermeldung bezieht sich ja auf diese Zeile:

foreach ($qstItem as $itemID) 

Der Trick ist einfach, dass die Variable $qstItem nirgend definiert wird. Was in der Zeile darüber definiert wird, ist eine Variable $qstItems (mit "s" am Ende). Ich denke daher, es ist einfach ein Typo. Versuchen Sie es mit

foreach ($qstItems as $itemID) 
by s184821 (120 points)
Oh wow, es hat funktioniert!
Wie toll, vielen Dank!

Noch eine weitere Frage:
Und zwar ist jetzt bei jeder Frage die graphische Verankerung, also dieses Dreieck abgebildet. Das möchte ich aber eigentlich nur je Seite einmal direkt unter der Fragestellung haben und sonst nur die geshuffelten Fragen direkt untereinander.
Muss ich dafür dann auch in den PHP-Code schreiben und wenn ja, was muss dann da rein?
by SoSci Survey (302k points)
Die haben diese Zeile hier im Code:

foreach ($items as $item) {
  question($item[0], [$item[1]], 'spacing=0', 'show-title=no', 'show-explanation=no');
}

Dort können Sie die Verankerung ("anchor") erstmal deaktivieren:

foreach ($items as $item) {
  question($item[0], [$item[1]], 'spacing=0', 'show-title=no', 'show-explanation=no', 'anchor=none');
}

Und wenn Sie das erst ab dem zweiten Item (Array-Index 1) machen wollen, würde es so aussehen:

foreach ($items as $i => $item) {
  if ($i > 0) {
    question($item[0], [$item[1]], 'spacing=0', 'show-title=no', 'show-explanation=no', 'anchor=none');
  } else {
    question($item[0], [$item[1]], 'spacing=0', 'show-title=no', 'show-explanation=no');
  }
}

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

...