Wörterkombinationen/Variable Wörter-Anzahl

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

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

    Comment


    • #3
      danke, permutation ist wahrscheinlich das stichwort

      Comment


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

        Comment


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

          Comment


          • #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
            Last edited by flx1; 20-08-2005, 14:23.

            Comment


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

              Comment


              • #8
                hab ich jetzt

                Comment


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

                  Comment

                  Working...
                  X