Autor |
Nachricht |
beeviZ
Threadersteller
Dabei seit: 30.09.2002
Ort: -
Alter: -
Geschlecht:
|
Verfasst Sa 03.09.2005 16:06
Titel [php] rekursive funktion / array umsortieren. |
|
|
ich bau mir gerade son kleines mini cms, bei dem man kategorien bis zu 3 ebenen verschachteln können soll.
(also bsp:
referenzen
print
flyer
)
Dazu hab ich ne Tabelle angelegt:
categories:
cat_id | parent_id
So. Wunderbar. Klappt auch soweit ganz gut.
Nun versuch ich mir ne Funktion zu schreiben, wo ich hinterher ne <ul>-Liste bauen kann in der Form:
• Referenzen
—• Nonprint
—• Print
——• Flyer
——• Plakate
Ich kriegs auch hin das wenn man sich in „Flyer“ befindet, er mir Plakate, Nonprint, Print und Referenzen anzeigt, weil man soll ja von überall überall anderswo hin navigieren können.
Meine Funktion sieht wiefolgt aus (ziemlich vermurkst, ich weiß):
Code: | function list_cats($cat_id) {
$parent = mysql_query("SELECT * FROM categories WHERE `parent_cat_id` = '$cat_id'");
$parents = mysql_query("SELECT * FROM categories WHERE `cat_id` = '$cat_id'");
$get_parent = mysql_fetch_row($parents);
$child = mysql_query("SELECT * FROM categories WHERE `cat_id` = '".$get_parent[1]."'");
while($cats = mysql_fetch_assoc($parent)) {
$categories[] = $cats['cat_id'];
$categories[] = $cats['display_name'];
}
while($cat = mysql_fetch_assoc($child)) {
$categories[] = list_cats($cat['cat_id']);
}
return $categories;
} |
Klappt soweit ganz gut, nur leider krieg ich die Multidimensionalen Arrays inner falschen Reihenfolge und weiß nich wie ich die umkehren kann.
Hab Beispielsweise folgendes in der Tabelle:
id | parent
3 | 0
7 | 3
8 | 3
10 | 7
Code: |
Array
(
[0] => Array
(
[0] => Array
(
[0] => 7
[1] => Nonprint
[2] => 8
[3] => Print
)
[1] => 10
[2] => test
)
) |
Damit ich mit dem Array aber vernünftig weiterarbeiten kann, bräucht ich sone Reihenfolge wie
Code: |
Array
(
[0] => Array
(
[0] => Array
(
[0] => 10
[1] => test
)
[1] => 7
[2] => Nonprint
[3] => 8
[4] => Print
)
) |
also so, das die ebenen die neu hinzukommen auf der untersten ebene erscheinen, nicht auf der ersten und die übergeordneten punkte nach hinten rutschen.
Probier jetzt schon über ne Stunde rum die Funktion umzudrehen und umzubauen, komm allerdings irgendwie auf keinen grünen Klee. Kann mir wer sagen wie ich da umbauen muss um das gewünschte Ergebnis zu erreichen?
Ich danke Euch
//edit:
um das nochmal ein wenig klarer zu machen:
im moment ists so: hab ich nur eine ebene, dann ist
$cat[1] = Referenzen
hab ich 2, dann is referenzen schon
$cat[0][1],
bei 3en dann
$cat[0][0][1]
und das soll sich halt insofern ändern, das Referenzen IMMER
$cat[1] ist, egal wie tief ich verschachtle.
Also, wie muss ich die schleifen umstellen? ich seh den wald vor lauter bäumen nicht.
Zuletzt bearbeitet von beeviZ am Sa 03.09.2005 16:26, insgesamt 2-mal bearbeitet
|
|
|
|
|
wdp
Dabei seit: 24.02.2005
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Sa 03.09.2005 19:53
Titel
|
|
|
ich erklaers dir schau im irc im query.
|
|
|
|
|
Anzeige
|
|
|
beeviZ
Threadersteller
Dabei seit: 30.09.2002
Ort: -
Alter: -
Geschlecht:
|
Verfasst Sa 03.09.2005 20:49
Titel
|
|
|
hmm. sonst noch irgendwer irgendwelche vorschläge? *gg*
|
|
|
|
|
tacker
Dabei seit: 22.03.2002
Ort: Trondheim, Norwegen
Alter: 43
Geschlecht:
|
|
|
|
|
beeviZ
Threadersteller
Dabei seit: 30.09.2002
Ort: -
Alter: -
Geschlecht:
|
Verfasst Sa 03.09.2005 22:44
Titel
|
|
|
hmm. danke.
aber alleine die nested_set class is größer als mein ganzes projekt sein wird
und die entsprechende funktion rauszupicken und abzuspecken, ich glaub da sitz ich auch tage dran. danke trotzdem.
wenn also jemand noch ne einfachere lösung haben sollte, dann bin ich zu tiefem dank verpflichtet
|
|
|
|
|
Cojote
Dabei seit: 02.09.2005
Ort: -
Alter: -
Geschlecht:
|
Verfasst So 04.09.2005 06:17
Titel
|
|
|
Ich würd dir ehrlich gesagt auch NestedSet empfehlen, da man nur einen einzigen Query braucht um die richtige Reihenfolge auszulesen. Aus eigener Erfahrung kann ich sagen dass das dann schon bei größer verschachtelten Kategorien einen merklichen Geschwindigkeitsvorteil bringt. Kann aber verstehen dass man sich da nicht so schnell rantraut, ist ja dann auch nicht mehr so trivial was neues einzufügen.
Falls noch Interesse besteht biete ich dir mal meine Hilfe an beim schreiben der Funktion.
|
|
|
|
|
tacker
Dabei seit: 22.03.2002
Ort: Trondheim, Norwegen
Alter: 43
Geschlecht:
|
|
|
|
|
Account gelöscht
Ort: -
Alter: -
|
Verfasst So 04.09.2005 10:38
Titel
|
|
|
Wenn man unbedingt mit einer Datenbank arbeiten will, um die Hierarchie abzubilden, fände ich das auch am elegantesten.
Anderenfalls wärs ja ne Idee, die Inhalte in einer DB zu hinterlegen und die Hierarchie unabhängig davon meinethalben in einer XML-Datei zu hinterlegen.
|
|
|
|
|
|
|
|
Ähnliche Themen |
PHP: Mehrdimensionales Array händisch umsortieren
Array außerhalb der funktion bringen...
Fieses PHP/MySQL-Skript gibt nur "Array Array Array..." aus
csv aufbereiten/umsortieren für Import
Online-Chat Funktion - mit On und Offline Funktion
if Problem mit array
|
|