echo $begrüßung;
if ( array_search ( $fachgebiet->id, $gebiet ) )
Nun wird aber der erste Wert des Arrays, also $gebiet[0] nicht gefunden, bzw gar nicht nach diesen gesucht! Es gibt definitiv eine fachgebiet->id=1 (aus einer DB ersichtlich) und eine $gebiet[0]=1
Da der Fehler mittlerweile erklärt wurde, bleibt mir nur noch, (abermals) die Wichtigkeit von Kontrollausgaben zu betonen. Variableninhalte und die Ergebnisse von Funktionen und Ausdrücken sich auszugeben (echo, var_dump()) hilft bei der Suche nach solchen Fehlern.
Zugegeben, diese Stelle ist etwas trickreich. array_search() liefert im konkreten Fehlerfall eine 0. Hier könnte man unachtsamerweise übersehen, dass die im boolschen Kontext zu false wird. Da aber der Bedingungsausdruck von if immer boolesch ausgewertet wird, kann man sich durch einen erzwungenen Typecast das Ergebnis deutlicher vor Augen führen:
var_dump(array_search($fachgebiet->id, $gebiet));
var_dump((bool) array_search($fachgebiet->id, $gebiet));
echo "$verabschiedung $name";