Ja, das ist nicht ganz trivial...
Was Sie brauchen, sind drei Listen (Arrays) für die 3 Kategorien. Die mischen Sie mittels shuffle()
. Und dann bauen Sie einfach nach dem gewünschten Schema zusammen:
// Die Bilder definieren wir mal separat und weisen ihnen Nummern zu. Ist einfacher
$bilder = [
1 => 'bild.N1.jpg',
// ...
16 => 'bild.N16.jpg',
21 => 'bild.P1.jpg',
// ...
28 => 'bild.P8.jpg',
31 => 'bild.N1.jpg',
// ...
38 => 'bild.N8.jpg'
];
// Die Abfolge definieren wir nur einmal
if (isset($abfolge)) {
$neutral = [1,2,3, ... 16];
$positiv = [21,22,23, ... 28];
$negativ = [31,32,33, ... 38];
shuffle($neutral);
shuffle($positiv);
shuffle($negativ);
// Jetzt das Zusammenbauen: 8 mal dasselbe Schema
$abfolge = [];
for ($i=0; $i<8; $i++) {
$abfolge[] = $positiv[$i];
$abfolge[] = $neutral[2*$i]; // Ergibt die Indizes 0, 2, 4, 6, ..., 14
$abfolge[] = $negativ[$i];
$abfolge[] = $neutral[2*$i + 1]; // Ergibt die Indizes 1, 3, 5, 7, ..., 15
}
registerVariable($abfolge)
}
// Jetzt noch anzeigen
$bildID = loopPage($abfolge);
$bildName = $bilder[$bildID];
html('<div><img src="'.$bildName.'" alt=""></div>');
Und falls Sie zu den Bildern noch Fragen zeigen möchten: Anhand der $bildID
ist das ganz einfach möglich. Mit putList()
können Sie die verwendete Abfolge auch bequem abspeichern.
Update: Ich nahm Ihre Frage zum Anlass, derartige Rotationen (und den Code hier im speziellen) etwas ausführlicher in der Anleitung zu erklären: Komplexe Rotationen