Wörterkombinationen/Variable Wörter-Anzahl

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

  • Wörterkombinationen/Variable Wörter-Anzahl

    Hallo,
    ich habe in einem Array Wörter stehen:
    $woerter = array(foo, bar, bla, blubb, text, wort);
    und die Anzahl der Wörter:
    $anzahl = 3;

    Jetzt brauch ich die Kombinationen der Wörter:
    z.b: foo - bar- bla; foo, bar, blubb; foo, bar, text; usw.

    das wäre mit verschachtelten for-schleifen kein problem. es wird aber zum problem mit der variablen $anzahl der wörter.

    das ist wahrscheinlich irgendwie mit rekursion zu lösen, ich weiß nur nicht wie.
    vielleicht ist es ja eine herausforderung für einige

    greetz,
    flx1

  • #2
    1. du meinst http://de.wikipedia.org/wiki/permutation ?

    2. danach kann man suchen: http://www.php-resource.de/forum/sea...der=descending

    3. aber auch googeln: http://www.google.de/search?hl=de&q=...mutation&meta=

    Kommentar


    • #3
      danke, permutation ist wahrscheinlich das stichwort

      Kommentar


      • #4
        hmm.. das ist nicht ganz was ich will.
        bei der permutation bekomm ich alle möglichen kombinationen aller array elemente. ich dagegen hab aber viele array elemente und möchte jetzt nur 3er oder 4er kombinationen. ist das auch irgendwie zu machen?

        greetz,
        flx1

        Kommentar


        • #5
          Original geschrieben von penizillin
          2. danach kann man suchen: http://www.php-resource.de/forum/sea...der=descending
          [ ] du möchtest das nochmal durcharbeiten und das gepostete beispiel auf pos. 5 verstehen.
          Kissolino.com

          Kommentar


          • #6
            ich habe folgendes:
            (aus dem beispiel
            PHP-Code:
            <?php

            // Ermittlung aller möglichen Kombinationen einer gegebenen Menge (Permutation)
            // mit Option, die Elementanzahl zu beschränken bzw. Elemente wegzulassen

            //max. execution duration 1200sec
            //******************************

            set_time_limit(1200);


            //all functions
            //*************

            function getPermutations($length$sublength$index$separator$start
            {     
            $out_pattern $out_scheme = array(); 
                
                if (
            $sublength>$length$sublength $length;

                
            $max factorial($length);
             
                echo 
            "options = $sublength / $length, factorial = $max <br />\n";
             
                for (
            $a=$start$a<($length+$start); $a++) $options[$a] = $pattern[$a] = $a;

                for (
            $x=0$x<$max$x++) 
                    {         
            $N $x
                    for (
            $i=1$i<= $length;) 
                        {             
            $pattern[($length+$start-$i)] = $N $i
                        
            $N $N/$i
                        
            $i++; 
                                   } 

                    unset(
            $perm);
                    
            $b $options;

                    foreach(
            $pattern AS $offset
                        {             list(
            $char) = array_splice($b$offset1);
                        
            $perm[] = $char
                        } 
                    
            $m array_slice ($perm0$sublength);   
                    
            $out_pattern[] = implode($m);
                    
            $out_scheme[] = join($separator$m);
                    } 
                if (
            $index==0) return array_unique($out_scheme); 
                if (
            $index==1) return array_unique($out_pattern); 



            function 
            factorial($s)
            {     if(
            $s$r $s factorial($s 1); 
                else 
            $r 1
                return 
            $r
            }

            //Beispiel einer Umsetzung mit einer Wortliste
            //********************************************

            $words=array("a""b""c""d""e""f""g""h""i""j"
            "k""l""m""n""o""p""q""r""s""t""u""v""w""x""y""z");

            $items=count($words);    //anzahl wörter (nicht änderbar)
            $include=3;        //anzahl zu berücksichtigende wörter
                        //output index muss 0 sein!
            $start=1;        //erste zahl der einheiten
            $separator='-';        //trennzeichen


            $results3 getPermutations($items$include0$separator$start); 

            for (
            $a2=($items+$start-1); $a2>=0$a2--) $search[]=$a2;
            $replace=array_reverse($words);

            $results4=array();
            for (
            $a1=0$a1<count($results3); $a1++)
                {
                
            $results4[]=str_replace($search$replace$results3[$a1]);
                }

            //ausgabe mit trennzeichen
            foreach ($results4 as $output) echo $output "<br />\n";

            ?>
            ich will damit jetzt alle dreierkombinationen haben. ich hab das laufen gelassen und das scipt war nach 5 minuten immer noch nicht fertig.
            mit diesem script hab ich das in einer sekunde:

            PHP-Code:
            <?php
            $abc 
            = array("a""b""c""d""e""f""g""h""i",
             
            "j""k""l""m""n""o""p""q""r""s""t""u",
             
            "v""w""x""y""z");

            for(
            $i=0$i<=(count($abc)-1); $i++){
                for(
            $j=0$j<=(count($abc)-1); $j++){
                    for(
            $k=0$k<=(count($abc)-1); $k++){
                        print(
            $abc[$i].$abc[$j].$abc[$k]."<br />");
                    }
                }
            }
            ?>
            das problem dabei ist nur, dass die wörteranzahl nicht variabel ist, genauer gesagt ich kann keine zweier oder vierer kombinationen machen.

            wie kann ich denn sowas umsetzen?

            greetz,
            flx
            Zuletzt geändert von flx1; 20.08.2005, 15:23.

            Kommentar


            • #7
              Ich sehe keinen Grund dafür, dass du deinen Code nicht umgebrochen hast. Los jetzt!

              Kommentar


              • #8
                hab ich jetzt

                Kommentar


                • #9
                  Und wieso muss ich bei 1280 immernoch scrollen?

                  Kommentar

                  Lädt...
                  X