sashybear: Mehrdim. Array richtig auslesen zum verarbeiten

Hallo alle miteinander...

ich habe ein mehrdimensionales Array und folgendes Problem...

Das Array:

[subnavlink] => Array
        (
            [0] => Array
                (
                    [Portrait] => Kurzprofil
                )

[1] => Array
                (
                    [Portrait] => Auf einen Blick
                )

[2] => Array
                (
                    [Management] => Geschäftsführung
                )

[3] => Array
                (
                    [Management] => Aufsichtsrat
                )

[4] => Array
                (
                    [Objekte] => Referenzobjekte
                )

[5] => Array
                (
                    [Objekte] => Angebote zum Kauf
                )

[6] => Array
                (
                    [Objekte] => Angebote zur Miete
                )

[7] => Array
                (
                    [News] => Aktuelle Pressemitteilungen
                )

[8] => Array
                (
                    [News] => Archiv
                )

)

Nun würde ich gerne alle Inhalte mit identischen Keys (z.B. 'Portrait' oder 'Objekte') mit implode in strings zusammenfassen um sie anschliessend weiter verabeiten zu können. Ich weiss leider nicht, wie ich meine Schleife(n) aufbauen soll? :(

Könnt Ihr mir helfen?

Danke
Sascha

  1. Ich habe noch vergessen das es auch möglich wäre daraus ein eindimensionales Array zu erzeugen, wenn das die Sache erleichtern sollte...

    so also:

    [subnavlink] => Array
        (
            [Portrait] => Kurzprofil
            [Portrait] => Auf einen Blick

    ....

  2. probiers mal mit

    $neuesArray = array();
    for($i=0;$i<count($subnavlink);$i++)
    {
       foreach($subnavlink[$i] as $key => $value)
           $neuesArray[$key][] = $value;
    }

    foreach($neuesArray as $key => $value)
       print $key . ": " . implode(",", $neuesArray[$key]) . "<br />";

    das sollte eigentlich funktionieren.
    Besser wäre es aber das Array gleich so aufzubaun.
    Also

    [subnavlink] => Array
        [Porträt] => Array
           [0] => Kurzprofil
           [1] => Auf einen Blick
        [Management] => Array
           [0] => Geschäftsführung
           [1] => Aufsichtsrat

    usw.

    Grüße

    Bezkeroon

    Hallo alle miteinander...

    ich habe ein mehrdimensionales Array und folgendes Problem...

    Das Array:

    [subnavlink] => Array
            (
                [0] => Array
                    (
                        [Portrait] => Kurzprofil
                    )

    [1] => Array
                    (
                        [Portrait] => Auf einen Blick
                    )

    [2] => Array
                    (
                        [Management] => Geschäftsführung
                    )

    [3] => Array
                    (
                        [Management] => Aufsichtsrat
                    )

    [4] => Array
                    (
                        [Objekte] => Referenzobjekte
                    )

    [5] => Array
                    (
                        [Objekte] => Angebote zum Kauf
                    )

    [6] => Array
                    (
                        [Objekte] => Angebote zur Miete
                    )

    [7] => Array
                    (
                        [News] => Aktuelle Pressemitteilungen
                    )

    [8] => Array
                    (
                        [News] => Archiv
                    )

    )

    Nun würde ich gerne alle Inhalte mit identischen Keys (z.B. 'Portrait' oder 'Objekte') mit implode in strings zusammenfassen um sie anschliessend weiter verabeiten zu können. Ich weiss leider nicht, wie ich meine Schleife(n) aufbauen soll? :(

    Könnt Ihr mir helfen?

    Danke
    Sascha

    1. Hi...

      danke erstmal für Deine schnelle Anwort und den Lösungsvorschlag.
      So ähnlich hatte ich mir das eigentlich auch vorgestellt. Die "for"
      schleife hatte ich auch schon mit einer "foreach" verschachtelt, das
      hatte mich aber nicht weiter gebracht weil ich die Sache mit dem
      leeren Array am Anfang nicht berücksichtigt hatte.

      Naja, also bei Deinem Beispiel bekomme ich jedenfalls folgende Ausgabe:

      Portrait: Kurzprofil
      Portrait: Kurzprofil;Auf einen Blick
      Portrait: Kurzprofil;Auf einen Blick
      Management: Geschäftsführung
      Portrait: Kurzprofil;Auf einen Blick
      Management: Geschäftsführung;Aufsichtsrat
      Portrait: Kurzprofil;Auf einen Blick
      Management: Geschäftsführung;Aufsichtsrat
      Objekte: Referenzobjekte
      Portrait: Kurzprofil;Auf einen Blick
      Management: Geschäftsführung;Aufsichtsrat
      Objekte: Referenzobjekte;Angebote zum Kauf
      Portrait: Kurzprofil;Auf einen Blick
      Management: Geschäftsführung;Aufsichtsrat
      Objekte: Referenzobjekte;Angebote zum Kauf;Angebote zur Miete
      Portrait: Kurzprofil;Auf einen Blick
      Management: Geschäftsführung;Aufsichtsrat
      Objekte: Referenzobjekte;Angebote zum Kauf;Angebote zur Miete
      News: Aktuelle Pressemitteilungen
      Portrait: Kurzprofil;Auf einen Blick
      Management: Geschäftsführung;Aufsichtsrat
      Objekte: Referenzobjekte;Angebote zum Kauf;Angebote zur Miete
      News: Aktuelle Pressemitteilungen;Archiv

      Also schon FAST das was ich wollte. Hast Du dazu evtl. noch einen
      Verbesserungsvorschlag?

      Gut wäre es wenn ich die einzelnen Begriffe die ausgegeben werden
      (also: Kurzprofil,Geschäftsführung,...) weg bekäme, und NUR die
      Strings mit dem Trenner ";" übrig blieben!?

      Danke für Deine/ Eure Hilfe

      Gruß
      Sascha

      probiers mal mit

      $neuesArray = array();
      for($i=0;$i<count($subnavlink);$i++)
      {
         foreach($subnavlink[$i] as $key => $value)
             $neuesArray[$key][] = $value;
      }

      foreach($neuesArray as $key => $value)
         print $key . ": " . implode(",", $neuesArray[$key]) . "<br />";

      das sollte eigentlich funktionieren.

      1. auweh, das kommt davon, wenn man es ned testet ;)

        probier mal statt

        foreach($neuesArray as $key => $value)
            print $key . ": " . implode(",", $neuesArray[$key]) . "<br />";

        foreach(array_keys($neuesArray) as $key)
            print implode(",", $neuesArray[$key]) . "<br />";

        Grüße

        Bezkeroon

        1. Hmm..  ne, das löst das Problem auch nicht!?

          Ausgabe ist jetzt fast wie vorher:

          Kurzprofil
          Kurzprofil;Auf einen Blick
          Kurzprofil;Auf einen Blick
          Geschäftsführung
          Kurzprofil;Auf einen Blick
          Geschäftsführung;Aufsichtsrat
          Kurzprofil;Auf einen Blick
          Geschäftsführung;Aufsichtsrat
          Referenzobjekte
          Kurzprofil;Auf einen Blick
          Geschäftsführung;Aufsichtsrat
          Referenzobjekte;Angebote zum Kauf
          Kurzprofil;Auf einen Blick
          Geschäftsführung;Aufsichtsrat
          Referenzobjekte;Angebote zum Kauf;Angebote zur Miete
          Kurzprofil;Auf einen Blick
          Geschäftsführung;Aufsichtsrat
          Referenzobjekte;Angebote zum Kauf;Angebote zur Miete
          Aktuelle Pressemitteilungen
          Kurzprofil;Auf einen Blick
          Geschäftsführung;Aufsichtsrat
          Referenzobjekte;Angebote zum Kauf;Angebote zur Miete
          Aktuelle Pressemitteilungen;Archiv

          Gruß
          Sascha

          auweh, das kommt davon, wenn man es ned testet ;)

          probier mal statt

          foreach($neuesArray as $key => $value)
              print $key . ": " . implode(",", $neuesArray[$key]) . "<br />";

          foreach(array_keys($neuesArray) as $key)
              print implode(",", $neuesArray[$key]) . "<br />";

          Grüße

          Bezkeroon

          1. dann muss Dein Array irgendwie anders aufgebaut sein.
            Wenns passt gehen beide Varianten - die mit array_keys und die davor.
            Hab grad folgendes getestet und gibt genau die Ausgabe, die Du willst:

            <?
            $subnavlink[0]["Portrait"] = "Kurzprofil";
            $subnavlink[1]["Portrait"] = "Auf einen Blick";
            $subnavlink[2]["Management"] = "Geschäftsführung";
            $subnavlink[3]["Management"] = "Aufsichtsrat";
            $neuesArray = array();
             for($i=0;$i<count($subnavlink);$i++)
             {
                foreach($subnavlink[$i] as $key => $value)
                    $neuesArray[$key][] = $value;
             }

            foreach($neuesArray as $key => $value)
                    print $key . ": " . implode(", ", $neuesArray[$key]) . "<br />";

            ?>

            Ausgabe ist dann:
            Portrait: Kurzprofil, Auf einen Blick
            Management: Geschäftsführung, Aufsichtsrat

            1. Hi...

              also vielleicht habe ich auch einen Denkknoten beim anlegen meines
              Arrays gemacht. Der Array baut sich durch versch. $_POST Variablen auf
              die mit Hilfe eines INPUT Elementes auf der Seite davor erstellt
              werden.

              Das Input Feld selber sieht so aus:

              <input type='text' name='subnavlink[][$_link]' class='textarea' id='subnavlink[][$_link]' maxlength='27' style='width: 180px' value='$elem'>

              Wobei in "$_link" ebend "Portrait,Objekte,..." stehen, und in $elem
              dann die einzelnen Elemente (z.B. Kurzprofil,Auf einen Blick...)

              Hast Du denn vielleicht eine Idee wie ich das besser aufbauen könnte
              damit ich die Elemente zuordnen kann?

              Sprich: "Portrait=Kurzprofil", "Portrait=Auf einen Blick" etc.

              Gruß
              Sascha

              dann muss Dein Array irgendwie anders aufgebaut sein.
              Wenns passt gehen beide Varianten - die mit array_keys und die davor.
              Hab grad folgendes getestet und gibt genau die Ausgabe, die Du willst:

              <?
              $subnavlink[0]["Portrait"] = "Kurzprofil";
              $subnavlink[1]["Portrait"] = "Auf einen Blick";
              $subnavlink[2]["Management"] = "Geschäftsführung";
              $subnavlink[3]["Management"] = "Aufsichtsrat";
              $neuesArray = array();
              for($i=0;$i<count($subnavlink);$i++)
              {
                  foreach($subnavlink[$i] as $key => $value)
                      $neuesArray[$key][] = $value;
              }

              foreach($neuesArray as $key => $value)
                      print $key . ": " . implode(", ", $neuesArray[$key]) . "<br />";

              ?>

              Ausgabe ist dann:
              Portrait: Kurzprofil, Auf einen Blick
              Management: Geschäftsführung, Aufsichtsrat

              1. hmmm, mach mal aus

                <input type='text' name='subnavlink[][$_link]' class='textarea' id='subnavlink[][$_link]' maxlength='27' style='width: 180px' value='$elem'>

                das hier:
                <input type='text' name='subnavlink[$_link][]' class='textarea' id='subnavlink[$_link][]' maxlength='27' style='width: 180px' value='$elem'>

                dann solltest Du die gewünschte Ausgabe wie folgt erhalten:

                foreach($_POST["subnavlink"] as $key => $value)
                         print $key . ": " . implode(", ", $neuesArray[$key]) . "<br />";

                Grüße

                Bezkeroon

                1. oha, muss natürlich statt

                  foreach($_POST["subnavlink"] as $key => $value)
                           print $key . ": " . implode(", ", $neuesArray[$key]) . "<br />";

                  so heissen:

                  foreach($_POST["subnavlink"] as $key => $value)
                           print $key . ": " . implode(", ", $_POST["subnavlink"][$key]) . "<br />";

                  1. YES!!!!  Das war es..  mann was für ein Knoten! Hehe..

                    Danke Dir fürs entwirren...

                    Gruß
                    Sascha

                    oha, muss natürlich statt

                    foreach($_POST["subnavlink"] as $key => $value)
                             print $key . ": " . implode(", ", $neuesArray[$key]) . "<br />";

                    so heissen:

                    foreach($_POST["subnavlink"] as $key => $value)
                             print $key . ": " . implode(", ", $_POST["subnavlink"][$key]) . "<br />";