$csv = ['mail;givenName;sn;telephoneNumber;createTimestamp'];
foreach(file('data.txt', FILE_SKIP_EMPTY_LINES ) as $v) {
if(preg_match('/mail|givenName|sn|telephoneNumber|createTimestamp/', $v)) {
$v = array_map('trim', explode(':', $v));
$arr[$v[0]] = $v[1];
}
if(count($arr)==5) {
$csv[] = implode(';', array_values($arr, 0));
$arr = [];
continue;
}
}
//в CSV формат
$csv = implode("\r\n", $csv);
//сохранем в файл, который потом можно будет скачать
file_put_contents('data.csv', $csv);
//либо можно сразу по запросу клиента отдавать на скачивание, не сохраняя в файл
Но учитывать то о чем говорилось ранее, ибо корректность вложения по ключам в коде не проверяется. Также не проверяется последовательность ключей в исходном файле, и если последовательность может быть произвольная, то перед добавлением в массив $scv нужно будет отсортировать массив $arr по ключам.
Переменная $arr не объявляется сразу, но если выключены предупреждения, то ничего страшного, главное чтобы она не была определена ранее.