Multidimensionales Array generieren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Multidimensionales Array generieren

    Hallo,

    kurz zu mir, bin nämnlich neu hier:
    Ich beschäftige mich seit mehreren Jahren hobbymäßig mit PHP. Ich würde mich selbst noch als Anfänger bezeichnen, da mir doch die Praxis fehlt und Vieles kann ich nur mit sehr viel Mühe und Auwand lösen.

    Nun zu meinem Problem:
    Ich beschreibe mal nur das für euch relevante, sonst würde das den Rahmen sprengen. Ich bekomme einen String pro Datensatz aus einer MySQL Datenbank. Dieser String gibt in gewisser Weise den Pfad innerhalb einer Baumstruktur an. Er hat folgendes Format:
    Code:
    <treename>:<node_1>.<node_2>.<node_n>
    Ein Beispiel währe:
    Code:
    acme:global.eu.germany.berlin
    Die Anzahl der Nodes, also der Verzeichnistiefe ist variabel und kann theoretisch unendlich lang sein (sprich ich will es nicht begrenzen).
    Die Gesamtheit dieser Strings möchte ich nun in ein Mehrdimensionen-Array packen welches die Baumstruktur enthält. (Wenn sich eine Baumstruktur auch anders Darstellen lässt lasse ich mich gerne eines Besseren belehren.)
    Beispiel:
    Ausgangsstrings:
    Code:
    acme:eu
    acme:eu.italy
    acme:eu.germany
    acme:eu.germany.berlin
    acme:eu.germany.munich
    acme:eu.italy.rome
    Hoffe ihr könnt mir helfen.

    Mit freundlichen Grüßen

    Stephan
    MFG Stephan

  • #2
    Hallo,

    willkommen im Forum!

    Sowas nennt man Gruppenwechsel, falls du weitere Infos darüber googlen willst.

    In PHP kann man sowas ganz einfach mit assoziativen Arrays programmieren, so dass es sich praktisch von alleine macht:

    PHP-Code:
    $data = array();
    $data["acme"] = array();
    $data["acme"]["eu"] = array();
    $data["acme"]["eu"]["italy"] = array();
    $data["acme"]["eu"]["germany"] = array();
    // ... 
    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Gut dieses Prinzip is mir durchaus bekannt.
      Problem bei der ganzen Sache istnur ich will dem Array ja dynamisch (in einer Schleife) Dimensionen zum array hinzufügen können.
      MFG Stephan

      Kommentar


      • #4
        Zitat von stephan1990 Beitrag anzeigen
        Problem bei der ganzen Sache istnur ich will dem Array ja dynamisch (in einer Schleife) Dimensionen zum array hinzufügen können.
        Dann musst du konkreter werden, denn ein Problem kann ich dabei im Moment nicht erkennen.
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Ich mache ja um die besagten Strings zu erhalten eine SQL Abfrage. Bei dieser Abfrage erhalte ich eine Anzahl von Datensätzen. In jedem Datensatz steht ein solcher String.
          Ich poste mal den Code der Schleife:

          PHP-Code:
          while($row mysql_fetch_array($query))
          {
              
          //Hier erhalte ich jeden Schleifendurchlauf über die Variable $row['uni'] den besagten string

          Das ganze in kleine stückchen zu unterteilen und so weiter is kein Problem. Nur ich hab jetzt keine ahnung wie ich den String in das entsprechende Array konvertiere. Per explode bekomme ich nur die teilstückchen als Elemente des Arrays. Möchte die aber doch gerne als weitere Dimension hinzufügen. Bzw. als weiteren Schlüssel des Arrays.
          MFG Stephan

          Kommentar


          • #6
            Du schaust einfach, ob's die entsprechende Array-Ebene schon gibt.

            Wenn nicht, legst du sie an; sonst fügst du ihr ein neues Element hinzu (das ggf. seinerseits wieder ein Array ist).
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              Da fehlt mir ja schon das verständnis. Wie prüfe ich denn ob es die Array-Eben schon gibt?

              Nehmen wir mal an ich hab den String "global.eu". Jetzt will ich testen ob es In meinem Array $data schon den Zweig $data['global']['eu'] gibt. Nun das könnte man ja mit isset machen.
              PHP-Code:
              while($row mysql_fetch_array($query))
              {
                  if(isset(
              $data.. //und weiter?

              Ich kann das ja nicht da reincoden, da ich ja nicht weiß wie viele dimensionen das Array hat etc.

              Mein problem ist die umsetzung von "global.eu" nach "$data['global']['eu']".
              MFG Stephan

              Kommentar


              • #8
                Zitat von stephan1990 Beitrag anzeigen
                Da fehlt mir ja schon das verständnis. Wie prüfe ich denn ob es die Array-Eben schon gibt?
                Mit isset, ggf. is_array.

                Ich kann das ja nicht da reincoden, da ich ja nicht weiß wie viele dimensionen das Array hat etc.
                Dann teste eine Dimension nach der anderen, in einer Schleife.
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  wie soll ich denn sagen dass der eine dimension höher springen soll? Für jede weitere Dimension die ich testen will muss ich doch zwangsläufig n weiter paar eckige klammern einsetzen? die kann ich schlecht in einer schleife dazufügen.
                  MFG Stephan

                  Kommentar


                  • #10
                    Zitat von stephan1990 Beitrag anzeigen
                    wie soll ich denn sagen dass der eine dimension höher springen soll?
                    Nicht höher, sondern runter.
                    Für jede weitere Dimension die ich testen will muss ich doch zwangsläufig n weiter paar eckige klammern einsetzen?
                    Nein, nicht wenn du von der jeweils aktuellen Dimension aus die nächste testest.
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      Zitat von wahsaga Beitrag anzeigen
                      Nein, nicht wenn du von der jeweils aktuellen Dimension aus die nächste testest.
                      Und das geht wie? Ich kann dir theoretisch folgen weiß aber leider nicht wie ich das in Quelltext fassen soll.
                      MFG Stephan

                      Kommentar


                      • #12
                        Wo genau liegt denn das Problem?

                        Du testest in einer Schleife eine Unter-Ebene, und „merkst“ dir dann diese Ebene als zu testende für den nächsten Schleifendurchlauf.
                        I don't believe in rebirth. Actually, I never did in my whole lives.

                        Kommentar


                        • #13
                          und in wiefern soll ich mir das ganze merken?
                          MFG Stephan

                          Kommentar


                          • #14
                            Zum „merken“ von Werten, Referenzen und sonstigem dienen beim Programmieren Variablen.
                            I don't believe in rebirth. Actually, I never did in my whole lives.

                            Kommentar


                            • #15
                              In einer Variablen, z. B. $current

                              PHP-Code:
                              $current =& $data;
                              foreach (
                              explode("."$path) as $step) {
                                  if (!isset(
                              $current[$step])) {
                                      
                              $current[$step] = array();
                                  }
                                  
                              $current =& $current[$step];

                              Zuletzt geändert von AmicaNoctis; 28.03.2010, 22:21.
                              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                              Super, danke!
                              [/COLOR]

                              Kommentar

                              Lädt...
                              X