echo $begrüßung;
Keine Ahnung, ob meine Idee an sich schon einen Denkfehler enthält... HILFE!
Ja, ich denke schon. substr_count() liefert keine negativen Werte zurück und wenn du zwei Funktionäre hast werden die nicht sortiert. So geht's einfacher:
return strcmp(
(int)!(bool)substr_count($person1[2], 'Funktion') . $person1[1] . $person1[0],
(int)!(bool)substr_count($person2[2], 'Funktion') . $person2[1] . $person2[0]);
Der erste Teil ermittelt die Anzahl der Vorkommen von "Funktion" im Feld 2 (sprechende Keys gefielen mir besser) und gibt nach den beiden Typecasts 0 oder 1 zurück. Der bool-Typecast wandelt 0 oder 1..n in die beiden Werte false oder true um, die der int-Typecast zu 0 oder 1 umwandelt. Ohne den int-Typecast gibts Leerstring und 1, also ein jeweils unterschiedlich langes Ergebnis. Ohne den bool-Typecast gibt es das auch, wenn mehr als 9 "Funktion" gefunden werden. Außerdem soll doch sicherlich nicht die Anzahl der "Funktion" zum Sortierkriterium werden. Dazwischen liegt noch eine Negation, die aus Funktionären eine 0 macht (wenn sie das nicht schon sowieso sind *g*). Die Umwandlung in String bekommt PHP durch die Stringverknüpfung mit Nachname und Vorname selbst hin.
Durch die Großscheibung des ersten Buchstabens eines Namens und dessen Beachtung bei strcmp() werden auch MeiereiAnton und MeierEike richtig sortiert (letzterer zuerst).
echo "$verabschiedung $name";