Je nachdem, wie Ihre Ihrem aussehen, könnten Sie sich auch die Auswahlabfolge und die Zuordnungsaufgabe ansehen. Dort sind Zeitlimits direkt verfügbar - nur als Idee.
Wenn Sie gleich viele Distraktoren wie Targets haben, dann müsste die Abfolge immer T/D/T/D/T/D/... sein - ich vermute aber einmal, Sie haben mehr Distraktoren? Es gibt dann unterschiedliche Möglichkeiten, z.B:
(1) Sie können erstmal ein Array in der Abfolge T/D/T/D/T/D/... erstellen (mit einer FOR-Schleife würden Sie dafür in jedem Durchganz zwei Items ergänze, jeweils eins aus jeder vorher gemischten Teilliste). Und anschließend würden Sie die restlichen Distraktoren an zufällig ausgewählten Stellen im Array platzieren, das geht mit random() und array_splice() recht einfach.
(2) Sie könnten die Liste erstmal zufällig mischen. Anschließend gehen Sie die Liste so lange durch, bis alles passt. Wenn sie bei einem Durchgang zwei aufeinanderfolgende Targets finden, tauschen Sie das zweite Element mit dem nächsten Disktraktor in der Reihe. Dafür benötigen Sie 3 verschachtelte Schleifen.
Details gerne auf Nachfrage.