Die Teilaufgabe ist, einem Array (es ist eine Art to-do-Liste) (anspruchslos) zufällig Schlüssel und Werte zu entnehmen und anschließend aus dem Array zu entfernen. Außerdem können "außer der Reihe" über den Schlüssel Paare entfernt werden. Irgendwann ist das Array dann leer. Deshalb würde sich der Rückgabewert zur Auswertung anbieten.
Da würde ich exakt EINMAL mit shuffle() das Array durchmischen und es danach mit foreach iterieren - schon hast du wunderbaren Zufall, ohne den Overhead des Entfernens von Arrayelementen oder der Prüfung, ob array_rand mit leeren Arrays kann oder nicht.
Gute Idee, das Array wird zwar auch mit neuen Werten aufgefüllt, dies allerdings nur ein mal. Die neuen Werte könnte man also vor dem Anfügen mischen. Foreach ohne Löschen fällt allerdings aus, da der Vorgang über mehrere Aufrufe läuft (Session). Ein manueller durchgeschleifter Index ginge auch, die Paare die außer der Reihe gelöscht werden muß ich aber auch dann wirklich löschen.