[PHP] Wert in einem Mehrdimensionalen Array suchen und alle Key´s zurückgeben

goto;

Erfahrenes Mitglied
Hallo zusammen,

aktuell stehe ich vor einem Problem, dass mir unlösbar "scheint".

Ich habe eine Seite auf der alle Kategorien aufgelistet werden, diese Kategorien werden Dynamisch Erzeugt - stehen auch in keiner Datenbank.
Der Aufbau sieht dann wie folgt aus:

Bsp:
Code:
Adapter
Akku
Arbeitsspeicher
Bluetooth-Adapter
DVI Kabel
Externe Festplatten
Festplatten
HDMI Kabel


Da dies nun sehr unübersichtlich ist, soll hier etwas Ordnung reingebracht werden.
Also habe ich mir gedacht - ich sollte eine Überkategorie anlegen, in der Form:

Code:
Ersatzteile
Gehäuseteile
Zubehör 
usw.

Ich habe also eine Array angelegt in dem ich alle möglichen Werte eintrage und hier auch die "Parent" Kategorie definiere.
Das sieht dann wie folgt aus:
PHP:
$categories = array(
        array('id' => 1,  		'parent' => 0,  		'name' => 'Akkus und Batterien', 						'link' => 'akkus_und_batterien'),
		array('id' => 2,  		'parent' => 1,  		'name' => 'Externe Akkus',       						'link' => 'externe_akkus'),
		array('id' => 3,  		'parent' => 1,  		'name' => 'Akkus',										'link' => 'akkus'),
		array('id' => 10, 		'parent' => 0,  		'name' => 'Netzteile und Ladeger&aumlte',				'link' => 'netzteile_und_ladegeraete'),
		array('id' => 11, 		'parent' => 10, 		'name' => 'Netzteile',									'link' => 'netzteile'),
		array('id' => 12, 		'parent' => 10, 		'name' => 'Wandler',									'link' => 'wandler'),
		array('id' => 13, 		'parent' => 10, 		'name' => 'Stecker',									'link' => 'stecker'),
		array('id' => 14, 		'parent' => 10, 		'name' => 'Stecker',									'link' => 'stecker'),
		array('id' => 15, 		'parent' => 10, 		'name' => 'Stecker',									'link' => 'stecker'),
		array('id' => 20, 		'parent' => 0,  		'name' => 'Speicher, Festplatten und Laufwerke',		'link' => 'speicher_festplatten_und_laufwerke'),
		array('id' => 21, 		'parent' => 20, 		'name' => 'Arbeitsspeicher',							'link' => 'arbeitsspeicher'),
		array('id' => 22, 		'parent' => 20, 		'name' => 'Festplatten',								'link' => 'festplatten'),
		array('id' => 23, 		'parent' => 20, 		'name' => 'Laufwerke',									'link' => 'laufwerke'),
		array('id' => 30, 		'parent' => 0,  		'name' => 'Ersatzteile',								'link' => 'ersatzteile'),
		array('id' => 31, 		'parent' => 30, 		'name' => 'interne Tastaturen',							'link' => 'interne_tastaturen'),
		array('id' => 32, 		'parent' => 30, 		'name' => 'LCD Displays',								'link' => 'lcd_displays'),       
		array('id' => 40, 		'parent' => 0, 			'name' => 'Kabel',										'link' => 'kabel'),
		array('id' => 41, 		'parent' => 40, 		'name' => 'DVI Kabel',									'link' => 'dvi_kabel'),	
		array('id' => 60, 		'parent' => 0, 			'name' => 'Zubehör',									'link' => 'zubeheor'),
		array('id' => 61, 		'parent' => 60, 		'name' => 'Port Replikator',							'link' => 'port_replikator'),
		array('id' => 62, 		'parent' => 60, 		'name' => 'Module',										'link' => 'module'),

);

Das Problem ist nun, dass mir nichts einfällt, wie ich das ganze bewerkstelligen kann. Gibt es eine möglichkeit - in meinem Array nach diesen Key´s zu suchen und die dazugehörigen Werte wie ( id,parent,name,link ) auszugeben damit ich damit dann auf das Parent Element zugreifen kann?

Mein Ansatz:
Die Dynamisch erzeugten Werte in dem Array suchen lassen ( in_array o.ä. ).
Allerdings wird mir in dem Fall ja nur TRUE oder FALSE geliefert.



Hoffe meine Frage ist einigermassen verständlich.

LG Splater
 
Hi

versteh das Problem nicht ganz.
Du willst also zB. für "HDMI-Kabel" wissen, dass die Hierarchie
"Zubehör - Kabel - HDMI-Kabel" (etwas in der Art) ist?

Einfach das ganze Array durchsuchen...

1: Index des HDMI-Kabels suchen
Array von vorn bis hinten durchschleifen und if(...=='HDMI-Kabel')...

2: Falls nicht gefunden, Ende. Sonst, Pseudocode:
Code:
echo 'HDMI-Kabel gehört zu';
while($categories[$index]['parent'] != 0)
{
    $index = Arrayposition von parent-ID gesucht;
    echo $categories[$index]['name'];
}

Ausgabe ca:
HDMI-Kabel gehört zu
Kabel
Zubehör

Für die ID-Suche entweder normale Schleife durch das Array
oder, falls due IDs alle nach der Größe geordnet sind,
auch Binärsuche etc. möglich zur Verschnellerung.

Btw., warum keine DB?
 
Versteh ich das Richtig? Du willst den Tree, den du da erstellst hast auslesen.
Unter anderem zu einem Child den gesammten Pfad?

Achja, wenn du deinen tree auch anzeigen willst, hab ich was für dich
PHP AdjacencyTree auslesen
und als OOP-Klasse (ist der bessere weg)
PHP AdjacencyTree Class
Einfach anstelle des DB-Loads in dem Beispiel dein Array abarbeiten
 
Zurück