Génération de combinaisons à partir de plusieurs tableaux en PHP
Introduction
La tâche de générer toutes les combinaisons d'éléments provenant de plusieurs tableaux est souvent rencontré lors de problèmes d'optimisation combinatoire. Cet article présente une solution récursive qui répond au besoin d'une fonction capable de gérer un nombre variable de tableaux sources.
Énoncé du problème
Étant donné plusieurs tableaux avec différents nombres de éléments, recherchez toutes les combinaisons d’éléments, où le nombre de combinaisons est égal au produit du nombre d’éléments dans chaque tableau. Par exemple, étant donné les tableaux suivants :
$arrayA = array('A1','A2','A3'); $arrayB = array('B1','B2','B3'); $arrayC = array('C1','C2');
Nous visons à générer un tableau de 18 combinaisons :
[ ['A1', 'B1', 'C1'], ['A1', 'B1', 'C2'], ['A1', 'B2', 'C1'], ... ]
Solution récursive
La fonction récursive suivante génère toutes les combinaisons possibles de items :
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; }
Démonstration
Le code suivant démontre l'utilisation de la fonction de combinaisons :
print_r( combinations( array( array('A1','A2','A3'), array('B1','B2','B3'), array('C1','C2') ) ) );
Cela affichera le tableau attendu de 18 combinaisons.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!