Hallo zusammen,
ich versuche etwas umzusetzen, was eigentlich exakt dem Beispiel "Zufällige Abfolge II" unter https://www.soscisurvey.de/help/doku.php/de:create:functions:setpageorder?s[]=setpageorder entspricht. Es gibt zwei Blöcke, "Sadism" und "SVO", und innerhalb des SVO-Blockes möchte ich die Reihenfolge der Seiten randomisieren, wobei die erste Seite (Instruktionen) immer am Anfang stehen soll. Deshalb habe ich den Beispielcode größtenteils kopiert und übernommen. Allerdings bekomme ich dann die Fehlermeldung "In der Funktion setPageOrder() wurde an Position 1 ein ungültiger Parameter vom Typ array(array) angegeben. Als Parameter sind entweder Strings (Texte) erlaubt oder Arrays, die ausschließlich Strings enthalten."
// Erst einmal die Seitenkennungen als Array speichern
$rotation = array(
'SVO' => array('SVOInstruction','SVO1','SVO2','SVO3','SVO4','SVO5','SVO6','SVO7','SVO8','SVO9'),
'Sadism' => array('Sadism'),
);
// Jeden Block einzeln mischen
foreach ($rotation as $key => $pages) {
// Die erste Seite aus dem Array $pages herausnehmen
$first = array_shift($pages);
// Den Rest mischen
shuffle($pages);
// Beides wieder zusammenfügen
array_unshift($pages, $first);
// Und in das Array $rotation zurückspeichern
$rotation[$key] = $pages;
}
// Jetzt noch die Reihenfolge der Blöcke zufällig mischen
shuffle($rotation);
// Jetzt das Ergebnis noch als Seitenabfolge festlegen
// Weiter soll es anschließend mit Seite 'demo' gehen
setPageOrder($rotation, 'demo');
// Reihenfolge speichern
put('IV02_01', array_search('SVO', $rotation) + 1);
put('IV02_02', array_search('Sadism', $rotation) + 1);
Das heißt für mich relativ eindeutig, dass setPageOrder() nicht damit umgehen kann, wenn ein zwei-dimensionales Array als erster Parameter übergeben wird. Was tun?
Edit: Ich habe das nun umgangen, indem ich die folgende Zeile vor setPageOrder() eingefügt habe:
// beide Arrays innerhalb $rotation zu einem Array zusammenfügen
$merged = array_merge($rotation[0], $rotation[1]);
Vielleicht sollte das Beispiel dahingehend angepasst werden?