Heim >Backend-Entwicklung >PHP-Tutorial >Wie generiert man in PHP alle möglichen Kombinationen aus einem 1D-Array?

Wie generiert man in PHP alle möglichen Kombinationen aus einem 1D-Array?

DDD
DDDOriginal
2024-10-30 16:38:02543Durchsuche

 How to Generate All Possible Combinations from a 1D Array in PHP?

PHP: Abrufen aller möglichen Kombinationen eines 1D-Arrays

Einführung

Die Aufgabe Das Abrufen aller möglichen Kombinationen von Elementen aus einem 1D-Array ist in verschiedenen Programmieranwendungen anzutreffen. Es erfordert ein umfassendes Verständnis iterativer oder rekursiver Ansätze, um alle möglichen Permutationen abzuleiten.

Iterativer Ansatz

Eine Methode beinhaltet die Verwendung eines iterativen Ansatzes, wie im folgenden Code gezeigt :

<code class="php">function getCombinations($arr) {
    $result = array();
    $count = count($arr);
    for ($i = 0; $i < (1 << $count); $i++) {
        $combination = array();
        for ($j = 0; $j < $count; $j++) {
            if (($i & (1 << $j)) != 0) {
                $combination[] = $arr[$j];
            }
        }
        $result[] = $combination;
    }
    return $result;
}

$array = array('Alpha', 'Beta', 'Gamma');
$combinations = getCombinations($array);

print_r($combinations);

Ausgabe:

Array
(
    [0] => Array
        (
        )

    [1] => Array
        (
            [0] => Alpha
        )

    [2] => Array
        (
            [0] => Beta
        )

    [3] => Array
        (
            [0] => Alpha
            [1] => Beta
        )

    [4] => Array
        (
            [0] => Gamma
        )

    [5] => Array
        (
            [0] => Alpha
            [1] => Gamma
        )

    [6] => Array
        (
            [0] => Beta
            [1] => Gamma
        )

    [7] => Array
        (
            [0] => Alpha
            [1] => Beta
            [2] => Gamma
        )

)</code>

Erklärung:

Diese iterative Lösung verwendet Bitmanipulation, um alles zu generieren mögliche Kombinationen. Durch Inkrementieren des Werts von $i durch alle möglichen Werte zwischen 0 und (1 << $count) - 1 wird das jeder Kombination entsprechende Bitmuster erstellt. Die Prüfung, ob ein bestimmtes Bit in diesem Muster gesetzt ist, ermöglicht die Bestimmung, welche Elemente aus dem Eingabearray zur aktuellen Kombination gehören.

Rekursiver Ansatz

Alternativ ein rekursiver Ansatz kann verwendet werden, um das gleiche Ergebnis zu erzielen:

<code class="php">function getCombinations($arr, $prefix = '') {
    $result = array();
    foreach ($arr as $element) {
        $result[] = $prefix . $element;
        $result = array_merge($result, getCombinations($arr, $prefix . $element . ' '));
    }
    return $result;
}

$array = array('Alpha', 'Beta', 'Gamma');
$combinations = getCombinations($array);

print_r($combinations);

Ausgabe:

Array
(
    [0] => Alpha
    [1] => Alpha Beta
    [2] => Alpha Beta Gamma
    [3] => Alpha Gamma
    [4] => Alpha Gamma Beta
    [5] => Beta
    [6] => Beta Alpha
    [7] => Beta Alpha Gamma
    [8] => Beta Gamma
    [9] => Beta Gamma Alpha
    [10] => Gamma
    [11] => Gamma Alpha
    [12] => Gamma Alpha Beta
    [13] => Gamma Beta
    [14] => Gamma Beta Alpha
)

Erklärung:

Diese rekursive Lösung generiert Kombinationen, indem nacheinander Elemente zum Präfix hinzugefügt und die verbleibenden Elemente im Array rekursiv bearbeitet werden. Der Basisfall tritt auf, wenn das Array leer ist, was zu einer gültigen Kombination führt. Die Kombinationen werden dann in umgekehrter Reihenfolge zurückgegeben.

Durch die Verwendung eines iterativen oder rekursiven Ansatzes können Entwickler effektiv alle möglichen Kombinationen von Elementen aus einem 1D-Array abrufen und so den unterschiedlichen Anforderungen verschiedener Programmierszenarien gerecht werden.

Das obige ist der detaillierte Inhalt vonWie generiert man in PHP alle möglichen Kombinationen aus einem 1D-Array?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn