Mehrdimensionales Array nach Schlüssel durchsuchen?

emuume

Mitglied
Hallo,

suche jetzt schon seit Stunden nach einer Möglichkeit wie im Titel angegeben. Ich finde immer nur die Suche nach Werten. Mein Array besitzt aber keine Werte, sondern nur Schlüssel und wieder Unterschlüssel (entspricht einer Ordnerstruktur mit Unterordnern).
Nun möchte ich neue Unterordner einfügen, muss dazu aber die richtige Stelle (Schlüssel) im Array finden.
Ich brauch also eine Funktion die der array_search entspricht, mir aber nicht den Pfad zu Werten, sondern den Pfad zu Schlüsseln gibt.

Ich möchte ein Script schreiben, welches automatisch Ordner mit entsprechenden Unterordnern sammelt und die jeweiligen Pfade dann ausgibt. Da die Tiefen nicht bekannt sind, möchte ich das gerne rekursiv machen. Komme aber grad nicht weiter :(
 
Nee, Schlüssel sind die Dinger in den eckigen Klammern. Also bei $ar[auto][bmw][reifen] will ich nach dem Schlüssel Reifen suchen und den Pfad bis dahin angezeigt bekommen.

Mein Array ist sozusagen ein Baum ohne Blätter :) Ne Ordnerstruktur halt.
 
genau :)

Mir schwant Schlimmes... Kann es sein, dass ich dafür ganz viele verschachtelte Suchen durchlaufen lassen muss? Als erstes wird Ebene 1 durchsucht, bei Misserfolg Ebene 2 von Schlüssel 1, dann Ebene 2 von Schlüssel 2 usw... ?
 
Ich weiß zwar wie du einzelne keys eines Arrays suchen kannst, aber hab jetzt noch ne Frage und zwar hat doch jeder Array, egal ob mehrdimensional oder nicht doch auch solch ein musster ...

PHP:
echo $ar[mein][kleiner][test];
//-->    Wert des Arrays ...

Demnach musst du ja so oder so einen Wert festlegen, oder liege ich da jetzt falsch ... erzeugst ja sonst nen "leeren" Array ...

Ansonsten, schau dir mal das an ...
http://us2.php.net/manual/de/function.array-keys.php
 
Der Wert bleibt leer. Dort kommt ein leeres Array hin. Kann für den Wert auch "0" einsetzen, da der Wert ja uninteressant ist für mich. Die Schlüssel mit ihren Unterschlüsseln stellen eine Ordner(Baum)struktur dar. Und wenn es keine Unterordner mehr gibt, dann is Ende. Ich brauch die Werte also nicht.

Deine Funktion gibt zwar alle Schlüssel, doch das nützt mir nichts. Ich weis ja, welche Schlüssel drinne sind, nur nicht wo.

edit: boah das war ein Akt. Habe mich jetzt mit der rekursiven Funktion rumgeplagt, die mir die oben genannte Struktur erstellen soll. UND ich habs hingekriegt!! Das is der Hammer ;)

Wen der Code interessiert:
PHP:
<pre>

<?

$path=".";

function sammle($path,$ordner){

	$templist=array();
	$handle	=	opendir($path);
	while ($file=readdir($handle)){
		if($file!="."&&$file!=".."&&$file!="index.php"&&$file!="thumbs"&&is_dir($path."/".$file)){ #sammle ordnernamen
			array_push($templist,$file);
		}
		
	}
	closedir($handle);
	
	if (count($templist)!=0){
		$count=count($templist);
		for($i=0;$i<$count;$i++){
			
			$ordner=array_shift($templist);
			$path.="/".$ordner;
			$add=sammle($path,$ordner);
						
			if (is_array($add)) {
				$array[$ordner]=$add;
			}
			else {
				$array[$add]=array();
				
			}
			
			$path=substr($path,0,strrpos($path,"/"));
			if(count($templist)==0){return($array);}
		}
	}
	return ($ordner);
}

$list=sammle($path,$ordner);
print_r($list);
?>

</pre>

Das Script einfach in einen Ordner mit vielen verzweigten Unterordnern legen. Es liefert die Ordnerstruktur in einem Array als Baum. (Es ist natürlich an meine Bedürfnisse angepasst, u.U. muß die if-Abfrage bei "sammle ordnernamen" angepasst werden)
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück