Hallo,
es gibt zwar schon einige Antworten, allerdings verstehe ich die Frage etwas anders.
Ich denke, pro Request soll 1 zufälliges Element (z.B. eine Farbe) ausgegeben werden. Beim nächsten Request sollen bereits ausgegebene Elemente nicht mehr zufällig gewählt werden können. Wurde jedes Element ein Mal ausgegeben, wird neu gemischt und es geht von vorne los.
In Code könnte das etwa so aussehen (ungetestet!) – nur als Konzept und ohne Fehlerbehandlung:
$farben = array("rot", "gruen", "blau", "schwarz");
$indices_serialized = file_get_contents("indices_serialized.txt"); // oder anders persistent speichern bzw. laden
if (count($indices_serialized) == 0 || !is_array($indices_serialized)) { // jedes Element wurde bereits ein Mal ODER: Skript lief noch nie, indices_serialized.txt enthält nur ""
$indices_serialized = array_keys($farben); // alle Keys stehen ab jetzt wieder als Index zur Verfuegung
shuffle($indices_serialized);
}
echo $farben[array_pop($indices_serialized)];
file_put_contents("indices_serialized.txt", serialize($indices_serialized));
Es gibt eine Race-Condition, wenn das Skript parallel aufgerufen wird – ob das für den Anwendungsfall tragisch wäre, muss der TO bewerten.
Viele Grüße
Claudius