Seperator Geschrieben 15. Mai 2008 Teilen Geschrieben 15. Mai 2008 Moin, ich hab folgendes Problem mit meinem PHP. Ich habe ein Mehrdimensionales Array, dieses muss verändert werden. Klingt soweit ganz einfach. Jetzt kommt aber der Knackpunkt, zB muss mittendrin eines der Arrays heraus und das darunter auf die Ebene geschoben werden. Erklären ist gut. Zeigen ist besser. Array nach Abruf: Array ( [1] => Array ( [id] => 1 [name] => Test [ueber] => 0 [anzahl] => 1 [subrubriken] => Array ( [2] => Array ( [id] => 2 [name] => Test1Sub1 [ueber] => 1 [anzahl] => 0 [subrubriken] => Array ( [6] => Array ( [id] => 6 [name] => Test1Sub1Sub1 [ueber] => 2 [anzahl] => 2 [subrubriken] => ) ) ) ) ) [3] => Array ( [id] => 3 [name] => Test2 [ueber] => 0 [anzahl] => 0 [subrubriken] => Array ( [4] => Array ( [id] => 4 [name] => Test2Sub1 [ueber] => 3 [anzahl] => 1 [subrubriken] => ) [5] => Array ( [id] => 5 [name] => Test2Sub2 [ueber] => 3 [anzahl] => 0 [subrubriken] => ) ) ) )[/PHP] Array wie es sein soll nach Bearbeitung [PHP]Array ( [1] => Array ( [id] => 1 [name] => Test [ueber] => 0 [anzahl] => 1 [subrubriken] => ) [4] => Array ( [id] => 4 [name] => Test2Sub1 [ueber] => 3 [anzahl] => 1 [subrubriken] => ) ) Ich weiß, dass ich das Rekursiv lösen muss (so wie schon den Zusammenbau), aber ich komme auf keinen grünen Zweig. Und nein beim Zusammenbau selber ist das frickeln noch nicht möglich. ich brauche erst alle Rubriken, da ja die ganz unten höher rutschen sollen, wenn die darüber nichtgefüllt sind (steht in anzahl). Hoffe ihr habt da ne Lösung? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Guybrush Threepwood Geschrieben 15. Mai 2008 Teilen Geschrieben 15. Mai 2008 Mach ein neues und kopier die Elemente aus dem Ursprünglichen so in das Neue wie du sie haben willst. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 15. Mai 2008 Teilen Geschrieben 15. Mai 2008 Hallo, sieht für mich aus wie eine Baumstruktur, warum implementierst Du diese dann nicht direkt auch so? Phil Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Seperator Geschrieben 16. Mai 2008 Autor Teilen Geschrieben 16. Mai 2008 Moin, wird ja als Baumsturktur implementiert, nur vorher müssen eben die rausgekickt werden, die leer sind. Ich hab übrigends die Antwort. private function dropKey($arr){ if(!empty($arr)){ foreach ($arr as $key => $val){ $newarr = $this->dropKey($arr[$key]["subrubriken"]); if ($val["anzahl"]==0){ if(!empty($newarr)){ foreach ($newarr as $newkey=>$newval){ $arr[$newkey] = $newval; } unset($arr[$key]); } else { return; } } else { $arr[$key]["subrubriken"] = $newarr; } } return $arr; } else { return; } } [/PHP] Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 16. Mai 2008 Teilen Geschrieben 16. Mai 2008 Hallo, warum gehst Du nicht rekusiv durch: Du liest den Baum von der Wurzel, wenn Du die Node erreichst, z.B. der Keyname (persönlich würde ich mit IDs arbeiten), musst du doch nur alle Kindknoten durchlaufen und ihnen als Elternknoten die ID des Parents deiner aktuellen Node geben, danach löschst Du die Node, auf der Du stehst. function delnode($node, $id) { if $node == null return; if $node.id == $id foreach($node.childs as $child) $child.parentid = $node.parentid; delete($node) else foreach($node.childs as $child) delnode($child, $id) } Meine Ansicht nach, benötigst Du nicht das Element "anzahl" in Deinem Array, da Du Dir über count(<Array>) die Elementanzahl des Arrays geben lassen kannst. Mit is_array(<array>) kannst du prüfen, ob sich in deinem Feld "subrubriken" ein Array befindet, falls nicht ist es ein Blatt in deinem Baum und du musst nicht weiter traversieren. Aber wirklich der Tipp, lege Deine Baumstruktur wirklich als solche ab. Das Array lohnt sich nur für binäre Baume, da man sie iterativ traversieren kann. Schreibe Dir eine Klasse Node, die als Eigenschaften eine eine ID (Objekt Hash) besitzt über die Du sie identifizieren kannst, eine Namen, sprich das was Du visuell benötigst, ein Datenfeld für die Daten und ein Array in das Du die Kindknoten füllst. Um Deinen Baum zu speichern kannst ihn z.B. serialisieren http://de2.php.net/manual/de/language.oop.serialization.php Es ist wirklich sinnvoll vorher sich Gedanken um die Repräsentation der Daten zu machen Phil Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Seperator Geschrieben 16. Mai 2008 Autor Teilen Geschrieben 16. Mai 2008 Moin, danke für deine weitere EInbringung. Aber Anzahl hat nicht direkt was mit dem Array zu tun, sondern gibt die Anzahl der Einträge in der Rubik wieder Deshalb brauch ich die Zahl. Und deshalb soll das Array bei anzahl 0 auch rausgeshcmissen werden. Wie gesagt funktioniert die von mir gepostete Lösung einwandfrei Seperator Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.