PHP Finden Sie Alle (etwas) Einzigartigen Kombinationen eines Arrays

Habe ich PHP-array, permutation /Kombination Fragen den ganzen Tag.. und kann immer noch nicht herausfinden :/

Wenn ich ein array wie:

20 //key being 0    
20 //key being 1    
22 //key being 2    
24 //key being 3

Brauche ich Kombinationen wie:

20, 20, 22 //keys being 0 1 2    
20, 20, 24 //keys being 0 1 3    
20, 22, 24 //keys being 0 2 3
20, 22, 24 //keys being 1 2 3

Den code, den ich derzeit habe, gibt mir:

20, 22, 24

weil es nicht wollen, wiederholen Sie die 20... aber das ist, was ich brauche!

Hier ist der code, den ich habe. es ist direkt aus Php Rekursion, um alle Möglichkeiten von strings

function getCombinations($base,$n){

$baselen = count($base);
if($baselen == 0){
    return;
}
    if($n == 1){
        $return = array();
        foreach($base as $b){
            $return[] = array($b);
        }
        return $return;
    }else{
        //get one level lower combinations
        $oneLevelLower = getCombinations($base,$n-1);

        //for every one level lower combinations add one element to them that the last element of a combination is preceeded by the element which follows it in base array if there is none, does not add
        $newCombs = array();

        foreach($oneLevelLower as $oll){

            $lastEl = $oll[$n-2];
            $found = false;
            foreach($base as  $key => $b){
                if($b == $lastEl){
                    $found = true;
                    continue;
                    //last element found

                }
                if($found == true){
                        //add to combinations with last element
                        if($key < $baselen){

                            $tmp = $oll;
                            $newCombination = array_slice($tmp,0);
                            $newCombination[]=$b;
                            $newCombs[] = array_slice($newCombination,0);
                        }

                }
            }

        }

    }

    return $newCombs;


}

Ich habe das Spiel mit der ($b == $lastEl) Linie, mit der kein Glück

===============

Fragen habe ich schon angeschaut, und es sind nicht die gleichen ODER erstellt eine out-of-memory-Fehler!:

Habe ich versucht, einige dieser algorithmen mit einem array mit 12 Elementen, und am Ende läuft out of memory. Aber der Algorithmus, den ich bin derzeit mit nicht geben Sie mir eine " out of memory Fehler.... ABER.. ich brauche diese Duplikate!

  • Bitte geben Sie ein gutes Beispiel von Eingabedaten und erwartete Ausgabe. var_dump() format passen würde
  • Endlich fand ich eine rekursive Sache in PHP - bitte siehe meine Antwort...
InformationsquelleAutor Katie | 2013-04-30
Schreibe einen Kommentar