echo $begrüßung;
Alle Kontrollausgaben zeigen mir, daß es offenbar schon mit dem 'is_array' zur Unterscheidung hakt, und der Pfadaufbau nicht stimmt, denn für jedes foreach hängt er alle $value['href'] - Werte aneinander...
Ich bin echt ratlos, das geht offensichtlich über meinen Horizont;
Du hast also von meinem Vorschlag die Variante b versucht umzusetzen. Dabei verlässt du die Funktion zu schnell. Sie darf nur dann ein false liefern, wenn das Array ergebnislos durchlaufen wurde. Deine Version läuft auf ein return false; sobald der Vergleich misslang. Die weiteren Array-Elemente kommen nun nicht mehr zum Zug.
Außerdem darfst du $path nicht verändern, sondern nur einen String übergeben, der aus seinem Inhalt plus dem neuen Pfad-Teil besteht.
Hier mal meine Version:
function mwe_search($haystack, $needle, $searchKey = null, $path = '', $sep = '/'){
foreach($haystack as $key =>$value) {
if (is_array($value)) {
if ($result = mwe_search($value,$needle, $searchKey, $path . $sep . $value['href'])) // Zuweisung, kein Vergleich
return $result;
} else {
if ($searchKey !== null) {
if (($searchKey == $key) and ($value == $needle))
return $path;
} elseif ($value == $needle)
return $path;
} //else isarray zu
} //foreach zu
return false;
} //funktion zu
echo "$verabschiedung $name";