Es ist schon wichtig, dass die Texte ungefähr gleich häufig vorkommen.
Das macht die Sache aufwändiger. Denn Sie können eine zufällige oder ausgeglichen-zufällige Ziehung nicht "live" mit komplexen Bedingungen kombinieren.
Das heißt: Wenn Sie komplexe Bedingungen brauchen zu zugleich sicher gehen wollen, dass die Text gleich häufig gezogen werden, dann müssten Sie die möglichen Kombinationen vorab definieren. Das können sehr viele werden - Sie müssten dann ungefähr so viele Kombinationen vorsehen, wie Sie Teilnehmer haben werden.
Wenn Sie die Kombinationen durch Programmierung lösen wollen, dann müssten sie mit einem respektablen Risiko leben, dass einige Texte (deutlich) seltener in der Stichprobe landen. Wenn wir uns die ähnlichen Texte, die nicht gemeinsam auftreten dürfen, als Gruppen vorstellen, dann werden vor allem Texte aus großen Gruppen am Ende stark unterrepräsentiert sein.
Eine Lösung gäbe es, wenn Sie sich um die vorab-Definition der Kombinationen herummogeln möchten: Sie könnten nicht Texte, sondern Gruppen ziehen. Dann könnten Sie die großen Gruppen auch entsprechend häufiger in den Zufallsgenerator legen, sodass am Schluss die Zahlen passen. Und für die Ziehung der Texte innerhalb jeder Gruppe bräuchten Sie auch nochmal einen Zufallsgenerator, der für Gleichverteilung sorgt.
Das geht in einen ähnliche Richtung, wie Sie sie bereits eingeschlagen haben.
Ich habe es mittlerweile anders versucht:
Ich habe 4 Rubriken angelegt, in denen jeweils 28 Lückentexte sind.
Also Rubrik F1-4.
Ich habe es nun mit 2 Zufallsgeneratoren versucht. Der erste setzt die Rubrik fest, denn innerhalb einer Rubrik dürfen alle Texte ausgewählt werden.
Prinzipell gut gedacht. Aber Sie benötigen dann nicht 2, sondern 5 Zufallsgeneratoren. Einen für die Rubrik und jeweils einen pro Rubrik. Sonst klappt es mit der Gleichverteilung nicht. Vorteil: Sie können in den 4 Zufallsgeneratoren gleich die kompletten Frage-Kennungen ablegen :)
Wenn der erste Zufallsgenerator die Kennung RG01 hat und die anderen 4 die Kennungen RG02 bis RG05, dann würde der PHP-Code wie folgt aussehen.
question('RG01'); // Erstmal eine Zahl ziehen
$code = value('RG01');
if ($code == 1) {
question('RG02');
$questions = valueList('RG02', null, 'label');
} elseif ($code == 2) {
question('RG03');
$questions = valueList('RG03', null, 'label');
} elseif ($code == 3) {
question('RG04');
$questions = valueList('RG04', null, 'label');
} else {
question('RG05');
$questions = valueList('RG05', null, 'label');
}
registerVariable($questions);
// Und dann die Fragen abarbeiten