PHP Find All (etwas) einzigartige Kombinationen eines Arrays

Ich habe mich den ganzen Tag mit Fragen zur Permutation / Kombination von PHP-Arrays beschäftigt und kann es immer noch nicht herausfinden: /

Wenn ich ein Array habe wie:

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

Ich brauche 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

Der Code, den ich derzeit habe, gibt mir:

20, 22, 24

weil es 20 nicht wiederholen will ... aber das ist was ich brauche!

Hier ist der Code, den ich habe. es ist direkt ausPHP-Rekursion, um alle Möglichkeiten von Zeichenketten zu erhalten

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 mit dem rumgespielt($b == $lastEl) Linie, ohne Glück

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

Fragen, die ich bereits angeschaut habe und die nicht mit denen übereinstimmen, bei denen ein Fehler aufgrund von Speichermangel aufgetreten ist:

Wie kann ich alle Permutationen in PHP ohne sequentielle Duplikate erhalten?Permutationen - alle möglichen ZahlenmengenKombinationen, Dispositionen und Permutationen in PHPPHP-Array-KombinationenErhalten Sie alle Permutationen eines PHP-Arrays?PHP: Wie bekomme ich alle möglichen Kombinationen von 1D Arrays?Wählen Sie nur eindeutige Array-Werte aus diesem Array ausErhalten Sie alle Permutationen eines PHP-Arrays?PHP: Wie bekomme ich alle möglichen Kombinationen von 1D Arrays?Wählen Sie nur eindeutige Array-Werte aus diesem Array ausWie kann ich alle Permutationen in PHP ohne sequentielle Duplikate erhalten?Algorithmus zur Rückgabe aller Kombinationen von k Elementen aus nSuchen Sie die Summe der Elemente in einem Array, deren Summe einer bestimmten Zahl entsprichtKombinationen, Dispositionen und Permutationen in PHPPHP-Array-KombinationenPHP-Rekursion, um alle Möglichkeiten von Zeichenketten zu erhaltenWie kann ich Permutationen eines Arrays in PHP zurückgeben?Permutationen - alle möglichen ZahlenmengenTeilmengenproblem in PHP mit MySQLFinden Sie eindeutige Wertekombinationen aus Arrays, indem Sie doppelte Paare herausfilternErmitteln aller eindeutigen Permutationen einer Zeichenfolge, ohne dass Duplikate generiert werdenGenerieren Sie alle eindeutigen PermutationenTeilmenge Summe für genau k ganze Zahlen?

Ich habe einige dieser Algorithmen mit einem Array von 12 Elementen ausprobiert und es geht mir am Ende der Speicherplatz aus. Der Algorithmus, den ich derzeit verwende, gibt mir jedoch keinen Fehler wegen zu wenig Arbeitsspeicher. ABER .. Ich benötige diese Duplikate!

Antworten auf die Frage(6)

Ihre Antwort auf die Frage