0 votes
in SoSci Survey (dt.) by s137634 (700 points)
edited by s137634

Guten Tag,
der folgende Code speichert im Augenblick die Reihenfolge der Seiten in die interne Variable IV12, ich würde aber gerne die Positionen speichern.

$order_Lineup4 = array( 'GU1', 'GU2', 'GU3', 'GU4' );
//GU1 = blau, GU2 = orange, GU3 = grün, GU4 = violett

//Seiten mischen
shuffle($order_Lineup4); 

for ($i=0; $i<count($order_Lineup4); $i++) {
  // Kennung der internen Variable aus Frage-Kennung plus Index erstellen
  $id = id('IV12', $i + 1);
  // Hier den Wert aus dem Array speichern
  put($id, $order_Lineup4[$i]);
}
// Die erste Seite aus dem Array $pages herausnehmen
$first = array_shift($order_Lineup4);
// Die zweite Seite aus dem Array $pages herausnehmen
$second = array_shift($order_Lineup4);
// Die dritte Seite aus dem Array $pages herausnehmen
$third = array_shift($order_Lineup4);

//Arrays mit der jeweils ausgewürfelten ersten, zweiten 
//und dritten Seite erstellen
$order_Lineup1 = array( $first);
$order_Lineup2 = array( $second);
$order_Lineup3 = array( $third);

// Jetzt das Ergebnis noch als Seitenabfolge festlegen
//Arrays und dazwischenliegende "Start"-Seiten ('S2' - 'S4') anordnen
setPageOrder($order_Lineup1, 'S2', $order_Lineup2, 'S3', $order_Lineup3, 'S4', $order_Lineup4, 'GK' );
}

Im Augenblick passiert z.B. folgendes:
IV12_01 = GU2
IV12_02 = GU3
IV12_03 = GU1
IV12_04 = GU4

ich hätte aber gerne, dass in IV12_01 fest die Position von GU1 geschrieben wird, also in diesem Fall "3" und entsprechend in IV12_02 die Position von GU2 etc.:
IV12_02 = 1
IV12_03 = 2
IV12_04 = 4

Vielen Dank im Voraus!

1 Answer

+1 vote
by SoSci Survey (302k points)
selected by s137634
 
Best answer

Danke für den Code-Auszug.

Bitte gehen Sie zum Speichern der Positionen (Ränge) vor wie in der Anleitung zu put() beschrieben. Also: Indizes mischen statt des Original-Arrays und entsprechend speichern:

$indices = array_keys($order_Lineup4);
shuffle($indices);

$order_Lineup4mix = array();
for ($i=0; $i<count($indices); $i++) {
  $id = id('IV12', $indices[$i] + 1);
  put($id, $i + 1);
  $order_Lineup4mix[$i] = $order_Lineup4[$indices[$i]];
}

Wenn Sie das nicht nur einmal, sondern 4-mal machen, dann ist es natürlich umso sinnvoller, dass Sie nicht 4 getrennte Array-Variablen verwenden, sondern dieser gleich wieder in ein Array schreiben.

by s137634 (700 points)
Vielen Dank für die schnelle Rückmeldung!

Ich habe den Code oben noch einmal ergänzt. Wenn die Randomisierung über einen Index passiert, dann müsste dieser Teil nämlich so wie ich das sehe auch angepasst werden.
by SoSci Survey (302k points)
Nun ja, Sie müssten weiter unten (also überall nach dem Code) statt $order_Lineup4 natürlich immer $order_Lineup4mix schreiben.
by s137634 (700 points)
Vielen Dank! Das habe ich erledigt. Das Programm stört sich allerdings noch an der Variable $Pages und gibt folgende Fehlermeldung aus:

Im PHP-Code trat ein Fehler auf.
Fehler im Fragebogen: Die PHP-Variable $pages wurde verwendet, in diesem PHP-Code aber noch nicht definiert (sie enthält noch keinen Wert).

PHP-Code

025 for ($i=0; $i<count($indices); $i++) {
026   $id = id('IV12', $indices[$i] + 1);
027   put($id, $i + 1);
028   $order_Lineup4mix[$i] = $pages[$order_Lineup4[$i]];
029 }
030
031
Fehler im Fragebogen: Trying to access array offset on value of type null
Zeile: 28

PHP-Code

025 for ($i=0; $i<count($indices); $i++) {
026   $id = id('IV12', $indices[$i] + 1);
027   put($id, $i + 1);
028   $order_Lineup4mix[$i] = $pages[$order_Lineup4[$i]];
029 }
030
031
by SoSci Survey (302k points)
Pardon, das $pages war beim Copy&Paste aus der Anleitung versehentlich stehen geblieben. Ich habe es in meiner Antwort oben korrigiert:

$order_Lineup4mix[$i] = $order_Lineup4[$indices[$i]];
by s137634 (700 points)
Vielen Dank, jetzt funktioniert es! :)

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

...