+1 vote
in SoSci Survey (dt.) by s122462 (165 points)

Meine Frage bezieht sich auf meinen vorherigen Post zu "Seiten und Blöcke randomisieren".

An ein paar kleinen Stellen hakt mein Code noch...

Zunächst möchte ich die Seiten meiner 4 Blöcke mischen, die Seiten mit dem Indizes 0 sind Intro-Seiten, sie sollen immer am Anfang des Blocks erscheinen:

$pages = array(array('B0', 'B1', 'B2', 'B3', 'B4', 'B5'),
  array('BH1', 'BH1', 'BH2', 'BH3', 'BH4', 'BH5'),
  array('BS1','BS1', 'BS2', 'BS3', 'BS4', 'BS5'),
  array('BD1','BD1', 'BD2', 'BD3', 'BD4', 'BD5')
);

$random = array();
for ($b=0; $b<count($pages); $b++) {
  $random[$b] = array();
}

Hier versuche ich festzulegen, dass die erste Seite pro Block (die mit dem Indizes 0) nicht rotiert wird:

$indices = array_keys($pages[0]);
$first = array_unshift($indices);
shuffle($indices);
$indices = array_merge([$first], $indices);

Die Zufallsreihenfolge soll auf jeden Block angewendet werden:

for ($i=0; $i<count($indices); $i++) {
  $id = id('BB17', $indices[$i] + 1);
  put($id, $i + 1);
  // Die Zufallsfolge für jeden Block anwenden
  for ($b=0; $b<count($pages); $b++) {
    $random[$b][$i] = $pages[$b][$indices[$i]];
  }
}

Wo es im Moment noch hakt:
Das Mischen der Seiten pro Block funktioniert nicht mehr, nachdem ich eine Seite in den Arrays hinzugefügt habe: Ich habe oben in den Arrays, wo die Seiten eines Blocks definiert werden, jeweils zu Beginn eine Seite (die Intro-Seite) hinzugefügt. Da es eine interne Variable BB17 gibt, in der die Reihenfolge der Seiten gespeichert wird, habe ich bei dieser internen Variable ebenfalls ein Item ergänzt (Ausprägungen BB17_01 bis BB17_06). Nun bekomme ich jedoch die diese Fehlermeldung:
"Für die Frage BB17 wurde kein Item mit der Kennung 7 gefunden"

Und diese Zeile im PHP-Code scheint nicht zu stimmen:

Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: Undefined offset: 6
Zeile: 29

PHP-Code

026   put($id, $i + 1);
027   
028   for ($b=0; $b<count($pages); $b++) {
029     $random[$b][$i] = $pages[$b][$indices[$i]];
030   }
031 }
032 

Schaue ich in die interne Variable, werden dort Werte von 2 bis 7 abgespeichert.

Die Randomisierung der Blöcke mit dem ersten Block als fixen Block und festen Seiten dazwischen funktioniert nun :-) :

// Jetzt noch die Blöcke mischen - nur den ersten nicht
$first = array_shift($random);
shuffle($random);
array_unshift($random, $first);

//setPageOrder($random, 'Grafiken');

//Blöcke mischen und zusätzliche Seiten hinzufügen
$random = array(
  $random[0],
'intro',
'intro2',
'label',
  $random[1],
  $random[2],
  $random[3]
);
setPageOrder($random, 'Grafiken');

Danke für Eure Hilfe!

related to an answer for: Seiten und Blöcke randomisieren

1 Answer

0 votes
by SoSci Survey (302k points)
edited by SoSci Survey

"Für die Frage BB17 wurde kein Item mit der Kennung 7 gefunden"

Beim Mischen der Seiten ward ich mit dem array_unshift() und array_shift() durcheinander gekommen. Versuchen Sie bitte einmal folgendes.

$indices = array_keys($pages[0]);
$first = array_shift($indices);
shuffle($indices);
array_unshift($indices, $first);
debug($indices);

Wenn wir das lösen, sollte auch das andere Problem gelöst sein.

by s122462 (165 points)
Es scheint leider immer noch nicht zu funktionieren. Ich habe im Code oben nun den Teil ausgetauscht, wie von Ihnen in Ihrer Antwort empfohlen.

Ich bekomme jedoch mehrere Fehlermeldungen:

In der Funktion setPageOrder() wurde ein ungültiger Parameter vom Typ NULL angegeben. Als Parameter sind entweder Strings (Texte) erlaubt oder Arrays, die ausschließlich Strings enthalten.

Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: count(): Parameter must be an array or an object that implements Countable
Zeile: 25

PHP-Code

022 $indices = array_unshift($indices, $first);
023 debug($indices);
024
025 for ($i=0; $i<count($indices); $i++) {
026   $id = id('BB17', $indices[$i] + 1);
027   put($id, $i + 1);
028   
Fehler im Fragebogen: Undefined index:
Zeile: 30

PHP-Code

027   put($id, $i + 1);
028   
029   for ($b=0; $b<count($pages); $b++) {
030     $random[$b][$i] = $pages[$b][$indices[$i]];
031   }
032 }
033
Fehler im Fragebogen: Undefined index:
Zeile: 30

PHP-Code

027   put($id, $i + 1);
028   
029   for ($b=0; $b<count($pages); $b++) {
030     $random[$b][$i] = $pages[$b][$indices[$i]];
031   }
032 }
033
Fehler im Fragebogen: Undefined index:
Zeile: 30

PHP-Code

027   put($id, $i + 1);
028   
029   for ($b=0; $b<count($pages); $b++) {
030     $random[$b][$i] = $pages[$b][$indices[$i]];
031   }
032 }
033
Fehler im Fragebogen: Undefined index:
Zeile: 30

PHP-Code

027   put($id, $i + 1);
028   
029   for ($b=0; $b<count($pages); $b++) {
030     $random[$b][$i] = $pages[$b][$indices[$i]];
031   }
032 }
033

Fehler im Fragebogen: count(): Parameter must be an array or an object that implements Countable
Zeile: 25

PHP-Code

022 $indices = array_unshift($indices, $first);
023 debug($indices);
024
025 for ($i=0; $i<count($indices); $i++) {
026   $id = id('BB17', $indices[$i] + 1);
027   put($id, $i + 1);
028   

Wenn ich in Zeile [030] das zweite $i durch ein $b austausche, erhalte ich weiterhin Feldermeldungen.

Schaue ich im Datensatz nach, wird für die interne Variable BB17 nur für BB17_01 ein Wert (= 1) gespeichert. Daher denke ich, dass es bereits funktioniert, dass die erste Seite fix gesetzt wird. Nur die Rotation der anderen Seiten funktioniert noch nicht...
by SoSci Survey (302k points)
Arg .. vor dem array_unshift(); darf keine Variable stehen...

Ich habe es oben in der Antwort korrigiert.
by s122462 (165 points)
Nun funktioniert es! Vielen, vielen Dank!

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

...