Ich bleibe lieber bei den "richtigen" Seitenabfolgen, das ist weniger abstakt:
C1e1,C1d1,C1aem,C1d2,C1lcm,C1aed,C1d3,C1d4,C1e2,C1d5,C1mpd,C1lcd,C1d6,C1mps,C1d7
Schritt 1: Wir ziehen die Seiten-Abfolge aus dem Zufallsgenerator. Schritt 2: Wir extrahieren die "ae"-Elemente.
$block = value('RG01x1', 'label');
$pages = explode(',', $block);
$freeIndices = array();
$freePages = array();
foreach ($pages as $i => $page) {
if (substr($page, 2, 2) == 'ae') {
$freeIndices[] = $i;
$freePages[] = $page;
}
}
Okay, nun haben wir neben einer Liste der Seiten ($pages
) noch eine Listen der "ae"-Seiten ($freePages
) und eine Liste, von welchen Indizes aus $pages
diese kommen ($freeIndices
). Fein. Mischen wir.
shuffle($freepages);
Und nun fügen wir an jedem der original-Indizes (Positonen) einen der Werte ein.
foreach ($freePages as $j => $page) {
$orgindex = $freeIndices[$j];
$pages[$orgIndex] = $page;
}
Ja, das muss man vielleicht zweimal lesen. Aber es ist herrlich einfach. Sehen wir uns das Ergebnis noch an - und ab damit in setPageOrder()
debug($block); // Original-Abfolge
debug($pages); // Gemischte Abfolge
setPageOrder($pages);