Im Moment prüfen Sie nur (Variable $double
), ob eine Wiederholung vorkommt. Sie tun aber noch nichts dagegenen. Mit folgender Modifikation wird neu gemischt:
$kuenstler = [
'AG01' => 1, // Alexej von Jawlensky
'AG02' => 2, // Arthur Dove
'AG03' => 3, // Hilma af Klimt
'AG04' => 4, // Marsden Hartley
'AG05' => 5, // Paul Klee
'AG06' => 6, // Theo Van Doesburg
'AG07' => 7, // Dixon
'AG08' => 8, // Schwitters
'AG09' => 9, // Archile Gorky
'AG10' => 10, // Maletwitsch
'AG11' => 10, // Malewitsch
'AG12' => 11, // Michail Matjuschin
'AG13' => 12, // Ola Rosanova
'AG14' => 5, // Paul Klee
'AG15' => 5, // Paul Klee
'AG16' => 5, // Paul Klee
'AG17' => 5, // Paul Klee
'AG18' => 5, // Paul Klee
'AG19' => 13, // Moholy
'AG20' => 13, // Moholy
'AG21' => 13, // Moholy
'AG22' => 13, // Moholy
'AG23' => 13, // Mondrian
'AG24' => 14, // Mondrian
'AG25' => 14, // Mondrian
'AG26' => 14, // Mondrian
'AG27' => 14, // Mondrian
'AG28' => 12, // Olga Rosanova
'AG29' => 15, // Chashnik
'AG30' => 15, // Chashnik
'AG31' => 15, // Chashnik
'AG32' => 16, // Kliun
'AG33' => 16, // Kliun
'AG34' => 17, // Otto Freundlich
'AG35' => 18, // Amadeo de Souza Cardoso
];
$seiten = array_keys($kuenstler);
do {
shuffle($seiten);
$lastOne = -1;
$double = false;
foreach ($seiten as $seite) {
if ($kuenstler[$seite] == $lastOne) {
$double = true;
}
$lastOne = $kuenstler[$seite];
}
} while ($double);
$seiten[] = 'AG FAKE';
setPageOrder($seiten);
Das ist aber relativ ineffizient, weil viele zufällige Abfolgen ausprobiert werden müssen, bevor eine passt. Die Wahrscheinlichkeit für eine Wiederholung ist doch relativ hoch.
Sollte es bei einzelnen Versuchen zu einem längerne "Hänger" kommen, müssten wir etwas effizienteres finden. Konkret würde man bei einer Wiederholung diesen Künstler mit einer zufälligen anderen Position tauschen.