array rekursiv duechsuchen - Fortsetzung
Maik W. aus E.
- php
0 dedlfix
Tach zusammen,
Hier fragte ich nach der Möglichkeit, mein Array rekrusiv nach Werten zu durchsuchen. dedlfix gab mir gute Tips, nur bei der Ausführung hakt es noch...
hier nochmal ein Ausschnitt des Arrays:
$entries = array (
array (
'href' => 'nachrichten',
'text' => 'Nachrichtenarchiv',
'title' => 'Sammlung älterer Nachrichten'
),
array (
'href' => 'ueber_uns',
'text' => 'Über uns',
'title' => '',
array (
'href' => 'auftrag',
'text' => 'Auftrag und Ziel',
'title' => '',
),
array (
'href' => 'ansprechpartner',
'text' => 'Mitarbeiter',
'title' => '',
),
),
array (
'href' => 'termine',
'text' => 'Termine',
'title' => 'Unsere Terminkalender',
array (
'href' => 'eigene',
'text' => 'Eigene Veranstaltungen',
'title' => '',
),
array (
'href' => 'partner',
'text' => 'Veranstaltungen mit Partnern',
'title' => '',
),
),
array (
'href' => 'presse',
'text' => 'Presse',
'title' => 'Informationspool für Journalisten',
array (
'href' => 'meldungen',
'text' => 'Meldungen',
'title' => 'Archiv aller Pressemeldungen',
),
array (
'href' => 'pressemappe',
'text' => 'Pressemappe',
'title' => '',
),
array (
'href' => 'archiv',
'text' => 'Bildarchiv',
'title' => 'Bildmaterial',
),
),
);
Hier nun die Funktion, die ich gebaut habe:
function mwe_search($haystack, $needle, $searchKey = null, $path = '', $sep = '/'){
foreach($haystack as $key =>$value){
if (is_array($value)) {
$path .= $sep. $value['href'];
$searchKey = $key;
mwe_search($value,$needle, $path='' );
}else{//ist kein Array
if(!$searchKey==null){
if($searchKey== $key){
if($value==$needle){
return $path;
}else{//value gleich needle zu
return false;
}
}else{//wenn searchkey gleich key
if($value==$needle) {
return $path;
}else{
return false;
}
}
}//if not searchkey zu
}//else isarray zu
}//foreach zu
}//funktion zu
Auf der ersten Ebene klappt es, da zuckt die Funktion, wenn der gesuchte Wert gefunden wird; ich kämpfe aber noch damit, den Pfad richtig zusammenzusetzen und die Funktion richtig rekursiv aufzurufen. Kann da mal jemand nachsehen?
Danke und
Maik
echo $begrüßung;
Du tust dir und anderen keinen Gefallen, wenn du die Code-Einrückung so undeutlich gestaltest. Eine neue Ebene sollte mindestens zwei Leerzeichen weiter eingerückt sein. Bei nur einem ist es schwer die Übersicht zu behalten. Auch ein paar mehr Leerzeichen z.B. zwischen den Variablen und Operatoren schaden ihr nicht.
function mwe_search($haystack, $needle, $searchKey = null, $path = '', $sep = '/'){
$searchKey = $key;
mwe_search($value,$needle, $path='' );
Fehler zu suchen ist eine unangenehme Aufgabe, aber eine notwendige. Gibt doch mal aus, was die Funktion für Werte übergeben bekommt. Dann solltest du recht schnell sehen, dass bei deinem rekursiven Aufruf der Pfad an der falschen Stelle steht, und außerdem immer '' ist. Du übergibst da nämlich immer das Ergebnis einer Zuweisung. Weiterhin ist die Zuweisung an $searchKey recht sinnlos. Und außerdem unterschlägst du die Auswertung des Ergebnisses des rekursiven Aufrufs.
echo "$verabschiedung $name";