Mehrdimensionales Array implodieren

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

  • Mehrdimensionales Array implodieren

    Hallo,


    ich habe ein kleines Problem mit dem Zusammenführen eines mehrdimensionalen Arrays.
    Ich habe folgenden Code geschrieben, mit dem es so halbwegs funzt:

    PHP-Code:
    <?php
    $spielfeld 
    = array(array());

    $spielfeld[0][0] = "00";
    $spielfeld[1][0] = "10";
    $spielfeld[2][0] = "20";
    $spielfeld[0][1] = "01";
    $spielfeld[1][1] = "11";
    $spielfeld[2][1] = "21";
    $spielfeld[0][2] = "02";
    $spielfeld[1][2] = "12";
    $spielfeld[2][3] = "23";

    // Gewünschte Ausgabe: 00,10,20;01,11,21;02,12,23

    for ($i=0;$i<3;$i++){
        
    $zeile.= implode(",",$spielfeld[$i]).";";
    }
    echo (
    $zeile);
    ?>
    Nun erscheint es mir als sehr umständlich, extra eine for-Schleife zu schreiben. Gibts da keine elegantere und vor allem performantere Lösung??

    Vielen Dank,
    Sebastian

  • #2
    foreach?
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Dachte, foreach wäre eher für assoziative Arrays, nicht für numerische. Und wenn, wie würdest Du es programmieren?
      Bin noch nicht so der PHP-Crack, erst recht nicht mit Multi-Arrays

      Original geschrieben von mrhappiness
      foreach?

      Kommentar


      • #4
        PHP-Code:
        foreach ($spielfeld as $spielfeld_i)
          
        $zeile .= implode(",",$spielfeld_i).";"
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          Hehe, das funzt ja schon gut

          Danke, aber ich hatte eher an etwas rekursives wie
          PHP-Code:
          $zeile implode(",",implode(";",$spielfeld)); 
          gedacht. Das geht wohl nicht?


          Original geschrieben von mrhappiness
          PHP-Code:
          foreach ($spielfeld as $spielfeld_i)
            
          $zeile .= implode(",",$spielfeld_i).";"

          Kommentar


          • #6
            Warum?

            P.S. TOFU ist doof
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              hm, gute frage,

              in erster linie, weil es mir eleganter und performanter erscheint. ich versuche immer, meinen code soweit es geht zu optimieren.

              << immer auf der suche nach dem perfekten code

              Kommentar


              • #8
                schreib dir ne funktion, an die ein array übergebn wird.
                dann durchläufst du mir foreach dieses array. checke ab, ob das unterarray wieder ein array ist, falls ja, dann übergibts du das wieder an deine funktion. dann wird dieses wieder gecheckt und falls es wieder ein multi-array ist, wird es wieder an deine funktion übergeben. das geht dann so weiter ...
                falls es ein eindimensionales array ist, dann nimmste einfach implode() ...
                am ende noch en return $neuarray oder sowas! wär doch für dich gut oder?

                Kommentar


                • #9
                  naja, habe das mal versucht. ich hoffe, es geht:

                  PHP-Code:
                  <?php
                  function implode_multi($multi) {
                      static 
                  $neu;
                      if(
                  is_array($multi)) {
                          
                  $i 0;
                          foreach(
                  $multi as $key=>$var) {
                              if(
                  is_array($var)) {
                                  
                  $multi[] = implode_multi($var);
                              }
                              else {
                                  if(
                  $i == (count($multi) - 1))
                                      
                  $neu[] = $var.";";
                                  else
                                      
                  $neu[] = $var.",";
                              }
                              
                  $i++;
                          }    
                      }

                      
                  $zeile substr(implode(""$neu), 0, -1);
                      return 
                  $zeile;
                  }

                  $spielfeld = array(array());

                  $spielfeld[0][0] = "00";
                  $spielfeld[1][0] = "10";
                  $spielfeld[2][0] = "20";
                  $spielfeld[0][1] = "01";
                  $spielfeld[1][1] = "11";
                  $spielfeld[2][1] = "21";
                  $spielfeld[0][2] = "02";
                  $spielfeld[1][2] = "12";
                  $spielfeld[2][3] = "23";

                  echo 
                  implode_multi($spielfeld);

                  Edit: jepp, funzt. Hbae es wie folgt getestet:

                  PHP-Code:
                  $spielfeld = array(array());

                  $spielfeld[0][0][0] = "0";
                  $spielfeld[0][0][1] = "1";
                  $spielfeld[0][0][2] = "2";
                  $spielfeld[0][1][0] = "3";
                  $spielfeld[0][1][1] = "4";
                  $spielfeld[0][1][2] = "5";
                  $spielfeld[1][0] = "6";
                  $spielfeld[2][0] = "7";
                  $spielfeld[2][0][1] = "8";
                  $spielfeld[2][0][2] = "9";
                  $spielfeld[2][1][0] = "10";
                  $spielfeld[2][1][2] = "11";
                  $spielfeld[3][0] = "12";
                  $spielfeld[3][1] = "13";
                  $spielfeld[3][2] = "14";

                  echo 
                  implode_multi($spielfeld); 
                  Ausgabe war: 0,1,2;3,4,5;6;789,10,11;12,13,14
                  Zuletzt geändert von firstlord18; 28.10.2005, 19:32.

                  Kommentar


                  • #10
                    @Threadersteller: ma getestet?

                    Kommentar

                    Lädt...
                    X