Heim >Backend-Entwicklung >PHP-Tutorial >Wie generiert man alle Kombinationen aus mehreren Arrays in PHP rekursiv?

Wie generiert man alle Kombinationen aus mehreren Arrays in PHP rekursiv?

Linda Hamilton
Linda HamiltonOriginal
2024-12-14 02:09:10791Durchsuche

How to Generate All Combinations from Multiple Arrays in PHP Recursively?

Kombinationen aus mehreren Arrays in PHP generieren

Einführung

Die Aufgabe, alle Kombinationen zu generieren von Elementen aus mehreren Arrays tritt häufig bei kombinatorischen Optimierungsproblemen auf. Dieser Artikel stellt eine rekursive Lösung vor, die den Bedarf an einer Funktion berücksichtigt, die eine variable Anzahl von Quellarrays verarbeiten kann.

Problemstellung

Gegeben sind mehrere Arrays mit unterschiedlicher Anzahl von Elemente: Finden Sie alle Kombinationen von Elementen, wobei die Anzahl der Kombinationen dem Produkt der Anzahl der Elemente in jedem Array entspricht. Zum Beispiel anhand der folgenden Arrays:

$arrayA = array('A1','A2','A3');
$arrayB = array('B1','B2','B3');
$arrayC = array('C1','C2');

Unser Ziel ist es, ein Array mit 18 Kombinationen zu generieren:

[
    ['A1', 'B1', 'C1'],
    ['A1', 'B1', 'C2'],
    ['A1', 'B2', 'C1'],
    ...
]

Rekursive Lösung

Die folgende rekursive Funktion generiert alle möglichen Kombinationen von Elemente:

function combinations($arrays, $i = 0) {
    // If reaching the last array, return the array itself
    if (!isset($arrays[$i])) {
        return array();
    }
    
    // If at the parent array, return the recursive call to the following array
    if ($i == count($arrays) - 1) {
        return $arrays[$i];
    }
    
    // Get combinations from subsequent arrays
    $tmp = combinations($arrays, $i + 1);

    $result = array();

    // Concatenate each array from tmp with each element from $arrays[$i]
    foreach ($arrays[$i] as $v) {
        foreach ($tmp as $t) {
            $result[] = is_array($t) ? 
                array_merge(array($v), $t) :
                array($v, $t);
        }
    }
    
    return $result;
}

Demonstration

Der folgende Code demonstriert die Verwendung der Kombinationsfunktion:

print_r(
    combinations(
        array(
            array('A1','A2','A3'), 
            array('B1','B2','B3'), 
            array('C1','C2')
        )
    )
);

Dadurch wird das erwartete Array ausgegeben aus 18 Kombinationen.

Das obige ist der detaillierte Inhalt vonWie generiert man alle Kombinationen aus mehreren Arrays in PHP rekursiv?. 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