Variante 1
Wenn die Gleichverteilung für die statistische Auswertung wichtig ist, dann wird es aufwändiger. Dann müsten Sie vorab Listen erstellen. Wenn die Bilder jeweils von 1 bis 40 nummeriert sind, könnte das wie folgt aussehen:
1,1, 2,2, 3,3, 4,4, 5,5, 6,6, ... , 40,40 <- erster Fall
1,2, 2,3, 3,4, 4,5, 5,6, 6,7, ... , 40,1 <- zweiter Fall
Wenn man die Reihenfolge der Paare erstmal außen vor lässt, dann gibt es 40! (das sind ziemlich viele) mögliche Kombinationen. Und daraus müssten Sie ungefähr so viele wie Sie Teilnehmer:innen erwarten so auswählen, dass die Paarungen ungefähr gleich häufig vorkommen.
Diese Liste mit den z.B. 300 Zeilen würden Sie dann einfach in einen Zufallsgenerator ziehen und dort pro Fall eine Zeile auswählen. Die Abfolge kann man dann nochmal rotieren.
Variante 2
Wenn Sie in Kauf nehmen, dass manche Paarungen häufiger auftreten dürfen (also z.B. 10-mal 5/20 aber nur 1-mal 6/21), dann wird es einfacher, dann können Sie pro Interview einfach aus zwei Zufallsgeneratoren jeweils (alle) 40 Codes ziehen, und diese nacheinander abarbeiten.
$bilder1 = array_values(valueList('RG01', null, 'label'));
$bilder2 = array_values(valueList('RG02', null, 'label'));
$i = loopPage(40);
show('TX01', [
'%bild1%' => $bilder1[$i],
'%bild2%' => $bilder2[$i]
]);
TX01 wäre hier einfach noch ein Text (HTML-Code), welcher die beiden Bilder nebeneinander oder auf Smartphones untereinander anzeigt.
Diese Lösung ist wesentlich einfacher - Sie benötigen eben nur 2 Zufallsgeneratoren (hier: RG01 und RG02), den kleinen HTML-Code (hier: TX01) und den PHP-Code oben.