Heim >Backend-Entwicklung >PHP-Tutorial >Wie generiert man alle Kombinationen aus mehreren Arrays in PHP rekursiv?
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!