Ergebnis 1 bis 6 von 6
  1. #1
    Avatar von slosd
    slosd ist offline Kaiser
    registriert
    19-02-2006
    Beiträge
    1.359

    Wert in mehrdimensionalem Array ändern

    Hi,
    ich möchte ein mehrdimensionales Array rekursiv nach einem Array, das einen bestimmten Wert enthält, durchsuchen und dann einen anderen Wert dieses Arrays ändern und scheitere gerade an der Umsetzung.

    Ich erklär mal was ich letztenendes erreichen möchte.
    Ich habe eine MySql-Tabelle:
    Code:
    #########################
    # id #   name  # parent #
    #########################
    | 1  |  Menü1  |   0    |
    +----+---------+--------+
    | 2  |  Menü2  |   0    |
    +----+---------+--------+
    | 3  | Menü1.1 |   1    |
    +----+---------+--------+
    | 4  | Menü1.2 |   1    |
    +----+---------+--------+
    | 5  | Menü1.3 |   1    |
    +----+---------+--------+
    Daraus möchte ich jetzt ein Array erstellen, dass dann so aussieht:
    Code:
    Array
    (
        [0] => Array
            (
                [id] => 1
                [name] => Menü1
                [children] => Array
                    (
                        [0] => Array
                            (
                                [id] => 3
                                [name] => Menü1.1
                                [children] => Array
                                    (
                                    )
    
                            )
    
                        [1] => Array
                            (
                                [id] => 4
                                [name] => Menü1.2
                                [children] => Array
                                    (
                                    )
    
                            )
    
                        [2] => Array
                            (
                                [id] => 5
                                [name] => Menü1.3
                                [children] => Array
                                    (
                                    )
    
                            )
    
                    )
    
            )
    
        [1] => Array
            (
                [id] => 2
                [name] => Menü2
                [children] => Array
                    (
                    )
    
            )
    
    )
    D.h. wenn ich jetzt z.B. den Datensatz mit ID 3 habe, dann suche ich nach dem Array in dem der Key "id" den Wert der Spalte "parent" hat.

    Das Problem dabei ist, dass das Array eine (theoretisch) unendlich Tiefe erreichen kann, da jeder Menüpunkt wieder "Kinder" haben kann und diese "Kinder" auch durchsucht werden müssen.

    Ich hab das bis jetzt irgendwie so versucht, dass ich eine Funktion rekursiv das Array durchsuchen hab lassen und diese dann eine Referenz auf dieses Array zurückgibt, allerdings hat das so nicht funktioniert.
    Fällt hier jemandem eine Lösung für mein Problem ein? Ich hoffe ich habs einigermaßen verständlich erklärt

  2. #2
    Avatar von Albu
    Albu ist offline Foren-Gott
    registriert
    04-07-2001
    Beiträge
    13.501

    AW: Wert in mehrdimensionalem Array ändern

    Zitat Zitat von slosd Beitrag anzeigen
    Ich hab das bis jetzt irgendwie so versucht, dass ich eine Funktion rekursiv das Array durchsuchen hab lassen und diese dann eine Referenz auf dieses Array zurückgibt, allerdings hat das so nicht funktioniert.
    Hast du tatsächlich eine Referenz oder nur eine Kopie?
    Und wo ist überhaupt der Code?
    Und wieso wird die Information parent in der neuen Datenstruktur verworfen? Die kannst Du nachher nicht trivial wieder herstellen!
    1. Get people to play Space Taxi
    2. Sell real estates on neptun
    3. Profit!

    IE is not a browser, it is a scream.


    Outside of a dog, a book is man's best friend. Inside of a dog, it's too dark to read.

  3. #3
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: Wert in mehrdimensionalem Array ändern


  4. #4
    Avatar von slosd
    slosd ist offline Kaiser
    registriert
    19-02-2006
    Beiträge
    1.359

    AW: Wert in mehrdimensionalem Array ändern

    Zitat Zitat von Albu Beitrag anzeigen
    Hast du tatsächlich eine Referenz oder nur eine Kopie?
    Und wo ist überhaupt der Code?
    Es sollte eigentlich eine Referenz gewesen sein. Ich habe den Code leider schon verworfen bzw. stark verändert:
    PHP-Code:
    class Areas
    {
        
        private 
    $areas;
        private 
    $db_areas;
        
        public function 
    buildStructure() {
            global 
    $_DB;
            
            
    $result $_DB->run(sprintf(
                
    "SELECT * FROM %s ORDER BY parent",
                
    $_DB->tableAlias("areas")
            ));
            
            
    $this->db_areas $raw_areas $_DB->getResult($result"assoc");
        
            foreach(
    $raw_areas as $area) {
                
                if(
    $area["parent"] != 0) {
                    
    $this->setChild($area$this->areas);
                }
                else {
                    
    $this->areas[] = array(
                        
    "id" => $area["id"],
                        
    "name" => $area["name"],
                        
    "url_name" => $area["url_name"],
                        
    "children" => array()
                    );
                }
                
            }
        }
        
        private function 
    setChild($child, &$areas) {
           
    // hier bin ich mir nicht sicher ob &$area das erzeugt, was man erwarten würde; aber es löst zumindest keinen Fehler aus
            
    foreach($areas as &$area) {
                if(
    $area["id"] == $child["id"]) {
                    
    $area["children"][] = array(
                        
    "id" => $child["id"],
                        
    "name" => $child["name"],
                        
    "children" => array()
                    );
                    return 
    true;
                }
                elseif(
    count($area["children"]) > 0) {
                    
    $this->setChild($child$area["children"]);
                }
            }
            return 
    false;
        }
            

    buildStructure() ist dann die Funktion die aufgerufen wird.
    Zitat Zitat von Albu Beitrag anzeigen
    Und wieso wird die Information parent in der neuen Datenstruktur verworfen? Die kannst Du nachher nicht trivial wieder herstellen!
    Ich habe den Wert von parent nicht als wichtig erachtet. Allerdings bräuchte ich den Wert ja nur zu id, name u. children dazugeben. Das ist dann nicht das Problem.
    Geändert von slosd (30-10-2007 um 10:30 Uhr)

  5. #5
    Avatar von Albu
    Albu ist offline Foren-Gott
    registriert
    04-07-2001
    Beiträge
    13.501

    AW: Wert in mehrdimensionalem Array ändern

    Zitat Zitat von slosd Beitrag anzeigen
    Ich habe den Wert von parent nicht als wichtig erachtet.
    Weswegen Du ihn in setChild auch gar nicht mehr berücksichtigst.

    ansonsten solltest Du den Link von ein schlauer mal besichtigen.
    1. Get people to play Space Taxi
    2. Sell real estates on neptun
    3. Profit!

    IE is not a browser, it is a scream.


    Outside of a dog, a book is man's best friend. Inside of a dog, it's too dark to read.

  6. #6
    Avatar von slosd
    slosd ist offline Kaiser
    registriert
    19-02-2006
    Beiträge
    1.359

    AW: Wert in mehrdimensionalem Array ändern

    omg, es scheitert an einer IF-Bedingung :brainless
    Vielen Dank.
    Diese Nested Sets werde ich mir dann auch mal zu Gemüte führen.

Ähnliche Themen

  1. Antworten: 8
    Letzter Beitrag: 16-02-2007, 01:12
  2. Antworten: 5
    Letzter Beitrag: 18-08-2005, 14:10
  3. [PHP] letzter wert aus array
    Von antiheld2000 im Forum Serverseitige Programmierung
    Antworten: 3
    Letzter Beitrag: 03-12-2003, 11:42
  4. neuer wert in array
    Von sanchez im Forum Serverseitige Programmierung
    Antworten: 8
    Letzter Beitrag: 16-04-2003, 17:05
  5. Zugriff auf Daten aus mehrdimensionalem Array
    Von Boris im Forum Serverseitige Programmierung
    Antworten: 11
    Letzter Beitrag: 24-03-2003, 17:25

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •