mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Sa 10.12.2016 02:50 Benutzername: Passwort: Auto-Login

Thema: [php] rekursive funktion / array umsortieren. vom 03.09.2005


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> [php] rekursive funktion / array umsortieren.
Seite: 1, 2  Weiter
Autor Nachricht
beeviZ
Threadersteller

Dabei seit: 30.09.2002
Ort: Dortmund
Alter: 23
Geschlecht: Männlich
Verfasst Sa 03.09.2005 16:06
Titel

[php] rekursive funktion / array umsortieren.

Antworten mit Zitat Zum Seitenanfang

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? *Schnief*

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
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
wdp

Dabei seit: 24.02.2005
Ort: -
Alter: -
Geschlecht: -
Verfasst Sa 03.09.2005 19:53
Titel

Antworten mit Zitat Zum Seitenanfang

ich erklaers dir schau im irc im query.
  View user's profile Private Nachricht senden
Anzeige
Anzeige
beeviZ
Threadersteller

Dabei seit: 30.09.2002
Ort: Dortmund
Alter: 23
Geschlecht: Männlich
Verfasst Sa 03.09.2005 20:49
Titel

Antworten mit Zitat Zum Seitenanfang

hmm. sonst noch irgendwer irgendwelche vorschläge? *gg*
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
tacker

Dabei seit: 22.03.2002
Ort: Offenbach am Main
Alter: 36
Geschlecht: Männlich
Verfasst Sa 03.09.2005 20:53
Titel

Antworten mit Zitat Zum Seitenanfang

http://pear.php.net/package/DB_NestedSet
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
beeviZ
Threadersteller

Dabei seit: 30.09.2002
Ort: Dortmund
Alter: 23
Geschlecht: Männlich
Verfasst Sa 03.09.2005 22:44
Titel

Antworten mit Zitat Zum Seitenanfang

hmm. danke. Lächel

aber alleine die nested_set class is größer als mein ganzes projekt sein wird *ha ha*
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 *zwinker*
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Cojote

Dabei seit: 02.09.2005
Ort: -
Alter: -
Geschlecht: Männlich
Verfasst So 04.09.2005 06:17
Titel

Antworten mit Zitat Zum Seitenanfang

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.
  View user's profile Private Nachricht senden
tacker

Dabei seit: 22.03.2002
Ort: Offenbach am Main
Alter: 36
Geschlecht: Männlich
Verfasst So 04.09.2005 09:02
Titel

Antworten mit Zitat Zum Seitenanfang

Schau dir mal die API-Dolu an:
http://pear.php.net/package/DB_NestedSet/docs/latest/DB_NestedSet/DB_NestedSet.html

Die wichtigsten Funktionen sind:
* createRootNode
* createSubNode
* deleteNode
* getAllNodes
* getChildren
* getSubBranch
* moveTree
* setAttr
* updateNode
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
Account gelöscht


Ort: -
Alter: -
Verfasst So 04.09.2005 10:38
Titel

Antworten mit Zitat Zum Seitenanfang

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
Fieses PHP/MySQL-Skript gibt nur "Array Array Array..." aus
Array außerhalb der funktion bringen...
[flash] Array aus PHP
PHP: Array kürzen
[PHP] Array-Problem...
Neues Thema eröffnen   Neue Antwort erstellen Seite: 1, 2  Weiter
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.