echo $begrüßung;
Ich hätte da zwei Dinge zu beanstanden.
$s = ""; $v = ""; $sort = "absteigend";
foreach($my_array as $v) $s[] = $v[4];
$s als String zu initialisieren, um es dann als Array zu verwenden, ist nicht nur unschön sondern birgt auch die Gefahr für Folgefehler in sich.
In der foreach wird es zwar automatisch zu einem Array konvertiert, das aber auch nur, weil es einen Leerstring enthält (schreib was anderes rein und du bekommst einen hübschen Fatal error), und weil du schreibend darauf zugreifst.
Es ist ja kein Problem ein leeres Array zu sortieren. Wenn aber $my_array leer ist - weil z.B. die Datenbankabfrage ein leeres Ergebnis lieferte - wird foreach nicht durchlaufen und $s bleibt ein String. Und dann beschwert sich array_multisort() zu Recht darüber.
Wenn du $my_array vor dem (erfolglosen) Befüllen mit Nutzdaten ebenfalls mit "" initialisieren würdest, gäbe es von foreach eine Warnung dafür.
Also:
$s = array();
$v vorab zu initialisieren ist überflüssig, da das von foreach sowieso bei jedem Durchlauf gemacht wird. Hier ist die Gefahr für Folgefehler bei nicht ausgeführtem foreach auch nicht vorhanden, weil $v außerhalb von foreach nicht weiter verwendet wird.
echo "$verabschiedung $name";