Ich habe es eben mit diesem Code versucht, es wurden aber insgesamt 26 Videos angezeigt und anstatt jeweils 7 Videos pro Kategorie gab es eine Kategorie mit 17 Videos, die gezeigt wurden und bei den anderen jeweils 3 Videos. 
// Array mit den Zahlen 1 bis 21 in zufälliger Reihenfolge
$video = range(1, 15);
shuffle($video);
// Array mit 7 mal 1 und 7 mal 2 und 7 mal 3 in zufälliger Reihenfolge
$version = array_merge(array_fill(0, 7, 1), array_fill(0, 7, 2), array_fill(0, 7, 3));
shuffle($version);
// 2D Array mit den Zettel (je Video- und Entscheidungszettel) (in den Spalten je mit Audio, Text und Audio+Text)
$zettelArray = [
    1 => [1 => 'VAT01-EAT01', 2 => 'VT01-ET01', 3=> 'VA01-EA01'],
    2 => [1 => 'VAT02-EAT02', 2 => 'VT02-ET02', 3=> 'VA02-EA02'],
    3 => [1 => 'VAT03-EAT03', 2 => 'VT03-ET03', 3=> 'VA03-EA03'],
    4 => [1 => 'VAT04-EAT04', 2 => 'VT04-ET04', 3=> 'VA04-EA04'],
    5 => [1 => 'VAT05-EAT05', 2 => 'VT05-ET05', 3=> 'VA05-EA05'],
    6 => [1 => 'VAT06-EAT06', 2 => 'VT06-ET06', 3=> 'VA06-EA06'],
    7 => [1 => 'VAT07-EAT07', 2 => 'VT07-ET07', 3=> 'VA07-EA07'],
    8 => [1 => 'VAT08-EAT08', 2 => 'VT08-ET08', 3=> 'VA08-EA08'],
    9 => [1 => 'VAT09-EAT09', 2 => 'VT09-ET09', 3=> 'VA09-EA09'],
    10 => [1 => 'VAT10-EAT10', 2 => 'VT10-ET10', 3=> 'VA10-EA10'],
    11 => [1 => 'VAT11-EAT11', 2 => 'VT11-ET11', 3=> 'VA11-EA11'],
    12 => [1 => 'VAT12-EAT12', 2 => 'VT12-ET12', 3=> 'VA12-EA12'],
    13 => [1 => 'VAT13-EAT13', 2 => 'VT13-ET13', 3=> 'VA13-EA13'],
    14 => [1 => 'VAT14-EAT14', 2 => 'VT14-ET14', 3=> 'VA14-EA14'],
    15 => [1 => 'VAT15-EAT15', 2 => 'VT15-ET15', 3=> 'VA15-EA15']
    
];
// Die Reihenfolge wird erstellt, $video gibt an welches Video, $version die Version
$reihenfolge = [];
for ($i = 0; $i < count($video); $i++) {
    $reihenfolge[] = $zettelArray[$video[$i]][$version[$i]];
};
setPageOrder($reihenfolge, 'Prima');