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

Hallo! Ich habe folgenden Code, mit dem die Reihenfolge von Seiten-Blöcken rotiert werden soll. Nun versuche ich im unteren Teil des Codes, die zufällige Reihenfolge der Blöcke im Datensatz zu speichern:

$groups = [
    	'A1-A3' => 1, 
    	'B1-B3' => 1,
    	'C1-C3' => 1, 
    	'D1-D3' => 2, 
    	'E1-E3' => 2,
    	'F1-F3' => 2,
    	'G1-G3' => 3, 
    	'H1-H3' => 3,
    	'I1-I3' => 3
    ];
      // Die Seiten nicht direkt mischen, sondern deren Positionen
    $blocks = array_keys($groups);
    shuffle($blocks);


// Nun die Ränge speichern - und die neue Abfolge der Seiten in $random speichern
$random = [];
for ($i=0; $i<count($blocks); $i++) {
  // Rang speichern
  $id = id('IV01', $blocks[$i] + 1);
  put($id, $i + 1);
  // Seite in der Abfolge speichern
  $random[$i] = $groups[$blocks[$i]];
}
// Neue Seitenabfolge setzen
// Nach der letzten Seite soll es auf Seite "T1" weitergehen
setPageOrder($random, 'T1');

Für die Zeile $id = id('IV01', $blocks[$i] + 1); wird mir allerdings die Fehlermeldung "non-numeric value encountered' ausgegeben. Haben Sie eine Idee, was zu ändern ist? Wird in $blocks[$i] + 1 keine numerischer Wert gespeichert?

Ich freue mich über Ihre Hilfe. :)

in SoSci Survey (dt.) by s070898 (135 points)

1 Answer

0 votes
 
Best answer

Die Variable $blocks enthält Werte wie z.B.

['G1-G3', 'A1-A3', 'H1-H3', ...]

Mit $blocks[0] (für $i=0) erhalten Sie also 'G1-G3'. Und damit kann die Funktion id() nichts anfangen.

Wenn Sie die Reihenfolge speichern möchten, dann müssen Sie das über ein weiteres array_keys() machen und nur die numerischen Indizes speichern:

$blocks = array_keys($groups);
$keys = array_keys($blocks);
shuffle($keys);
$random = [];
for ($i=0; $i<count($keys); $i++) {
  // Rang speichern
  $id = id('IV01', $keys[$i] + 1);
  put($id, $i + 1);
  // Seite in der Abfolge speichern
  $random[$i] = $blocks[$keys[$i]];
}
by SoSci Survey (154k points)
selected by s070898
Vielen Dank!
...