Maison >développement back-end >tutoriel php >Comment puis-je générer toutes les combinaisons d'éléments à partir de plusieurs tableaux en PHP ?
Générer toutes les combinaisons d'éléments dans plusieurs tableaux en PHP
La tâche consistant à trouver toutes les combinaisons d'éléments dans plusieurs tableaux est souvent rencontrée en programmation . Le nombre de tableaux et d'éléments dans chaque tableau peut varier.
Solution récursive
Une approche récursive peut résoudre efficacement ce problème. La fonction combinaisons() fournit une solution :
function combinations($arrays, $i = 0) { if (!isset($arrays[$i])) { return array(); } if ($i == count($arrays) - 1) { return $arrays[$i]; } // get combinations from subsequent arrays $tmp = combinations($arrays, $i + 1); $result = array(); // concat 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; }
Exemple d'utilisation
Considérez les tableaux :
$arrayA = array('A1','A2','A3'); $arrayB = array('B1','B2','B3'); $arrayC = array('C1','C2');
Pour tout trouver combinaisons :
print_r(combinations(array($arrayA, $arrayB, $arrayC)));
Sortie :
Array ( [0] => A1 [1] => B1 [2] => C1 [3] => A1 [4] => B1 [5] => C2 [6] => A1 [7] => B2 [8] => C1 [9] => A1 [10] => B2 [11] => C2 [12] => A1 [13] => B3 [14] => C1 [15] => A1 [16] => B3 [17] => C2 [18] => A2 [19] => B1 [20] => C1 [21] => A2 [22] => B1 [23] => C2 [24] => A2 [25] => B2 [26] => C1 [27] => A2 [28] => B2 [29] => C2 [30] => A2 [31] => B3 [32] => C1 [33] => A2 [34] => B3 [35] => C2 [36] => A3 [37] => B1 [38] => C1 [39] => A3 [40] => B1 [41] => C2 [42] => A3 [43] => B2 [44] => C1 [45] => A3 [46] => B2 [47] => C2 [48] => A3 [49] => B3 [50] => C1 [51] => A3 [52] => B3 [53] => C2 )
Cette solution fournit toutes les combinaisons possibles de manière efficace.
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!