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!