Array-Werte kombinieren und in Strings ausgeben

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

  • Array-Werte kombinieren und in Strings ausgeben

    Hallo, ich habe da ein ziemlich kniffeliges logisches Problem zu lösen, und seh mittlerweile den Wald vor lauter Bäumen nicht mehr.

    Ich muß sämtliche Werte eines mehrdimensionalen Arrays so miteinander kombinieren, daß jede mögliche Kombination mindestens einmal auftritt. Dabei soll aus den Kombinationen Datensätze entstehen.

    Klingt das unverständlich? Vermutlich... Ich versuchs mal mit einem Beispiel:

    Hier mal ein mögliches Array:
    $feld[0]['gueltig'][0] = 1;
    $feld[0]['gueltig'][1] = 2;
    $feld[0]['gueltig'][2] = 3;

    $feld[1]['gueltig'][0] = "ab";
    $feld[1]['gueltig'][1] = "cd";
    $feld[1]['gueltig'][2] = "ef";
    $feld[1]['gueltig'][3] = "gh";

    $feld[2]['gueltig'][0] = "1g";

    $feld[3]['gueltig'][0] = "test1";
    $feld[3]['gueltig'][1] = "test2";
    $feld[3]['gueltig'][2] = "test3";


    Die Werte sollen nun so kombiniert werden, daß ein Textstrings etwa in der Art herauskommt:

    Kombination 1: "1ablgtest1"
    Kombination 2: "2ablgtest1"
    Kombination 3: "3ablgtest1"
    Kombination 4: "1cdlgtest1"
    Kombination 5: "2eflgtest1"
    Kombination 6: "3ghlgtest1"
    ...

    Mir fehlt jetzt einfach der Durchblick, wie ich am elegantesten alle möglichen Kombinationen erzeugen kann. Klingt das nur so kompliziert, oder ist es das auch

    Ich habe bei meinen bisherigen Lösungsversuchen Schleifenkonstrukte erzeugt, die jede Teppichweberein vor Neid erblassen lassen würde

    Hat hier vielleicht jemand 'ne Idee bzw. Lösungsansatz, wie ich diese Wertekombinationen hinbekommen kann?

  • #2
    Benutz n verschachtelte schleifen und gut ist...

    Wobei n = count($feld)

    Kommentar


    • #3
      Ja, das hatte ich schon versucht. Da die Anzahl der Felder und Ausprägungen nicht fix ist, habe ich mich da leider totverschachtelt. Aber anscheinend gibts keinen anderen Weg

      Kommentar


      • #4
        Kommt der wert von feld[0] immer an erste stelle, oder kann der an jeder stelle stehen=

        Kommentar


        • #5
          PHP-Code:
          $num 1;
          foreach(
          $feld as $f)
              
          $num*= count($f['gueltig']);
              
          foreach(
          $feld as $f)
          {
              
              
          $j 0;
              for(
          $i=0;$i<$num;$i++)
              {
                  
          $k[$i].= $f['gueltig'][$j++];
                  if(
          $j == count($f['gueltig']))
                      
          $j 0;
                      
              }


          Kommentar


          • #6
            Hallo TobiaZ,

            vielen Dank für Deine Hilfe, aber ich fürchte, ganz so einfach ist das doch nicht. Probier mal was passiert, wenn alle Felder die gleiche Anzahl von Belegungen haben - dann ergibt sich nur ein und dieselbe Wertekombination in x-facher Wiederholung.

            Leider kann ich nur erkennen, daß Dein Script nicht sauber funktioniert, eine Lösung hab ich aber immer noch nicht gefunden. Aber ich denke, Du hast mir zumindest schon ein Stück weitergeholfen.
            Zuletzt geändert von emil_der_hase; 11.11.2007, 22:27.

            Kommentar


            • #7
              Ja hattest recht. Da war noch eine Kleinigkeit vergessen.

              Habs jetzt iterativ lösen können:

              PHP-Code:
              foreach($feld as $x => $f)
              {
                  
                  
              $j 0;
                  for(
              $i=0;$i<$combi;$i++)
                  {

                      
              $erg[$i].= $f['gueltig'][$j];

                      if((
              $i+1) % $mod[$x] == 0)
                          
              $j++;
                      if(
              $j == $count[$x])
                          
              $j=0;

                  }


              Feglen nur drei Hilfsvariablen, von denen ich mindestens die Bedeutung hören möchte.

              BTW: Ansonsten könntest du da auch mal rekursiv an die Sache rangehen...

              Kommentar


              • #8
                PHP-Code:

                $combi 
                1;
                foreach(
                $feld as $x => $f)
                {
                    
                $count[$x] = count($f['gueltig']);
                    
                $mod[$x] = $combi;
                    
                $combi*= $count[$x];
                }



                foreach(
                $feld as $x => $f)
                {
                    
                    
                $j 0;
                    for(
                $i=0;$i<$combi;$i++)
                    {

                        
                $erg[$i].= $f['gueltig'][$j];

                        if((
                $i+1) % $mod[$x] == 0)
                            
                $j++;
                        if(
                $j == $count[$x])
                            
                $j=0;

                    }


                Auch wenn der Threadstarter das Interesse verloren hat, vervollständige ich den Thread mal...

                Kommentar

                Lädt...
                X