Array-Werte kombinieren und in Strings ausgeben

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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)

    Comment


    • #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

      Comment


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

        Comment


        • #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;
                      
              }


          Comment


          • #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.
            Last edited by emil_der_hase; 11-11-2007, 21:27.

            Comment


            • #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...

              Comment


              • #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...

                Comment

                Working...
                X