Maison >développement back-end >tutoriel php >Comment puis-je générer efficacement toutes les combinaisons possibles d'éléments à partir de plusieurs tableaux PHP de différentes longueurs ?
Génération de combinaisons d'éléments dans plusieurs tableaux PHP
Lorsqu'il s'agit de plusieurs tableaux de longueurs variables, il devient difficile de générer toutes les combinaisons possibles de leurs éléments. Cet article résout ce problème en fournissant une solution PHP polyvalente.
La tâche consiste à créer une fonction qui accepte un nombre arbitraire de tableaux et génère un tableau contenant toutes les combinaisons possibles de leurs éléments. Par exemple, étant donné trois tableaux :
$arrayA = array('A1', 'A2', 'A3'); $arrayB = array('B1', 'B2', 'B3'); $arrayC = array('C1', 'C2');
Le résultat souhaité serait un tableau de 18 combinaisons :
[ ['A1', 'B1', 'C1'], ['A1', 'B1', 'C2'], ['A1', 'B2', 'C1'], ['A1', 'B2', 'C2'], ['A1', 'B3', 'C1'], ['A1', 'B3', 'C2'], ['A2', 'B1', 'C1'], ['A2', 'B1', 'C2'], ['A2', 'B2', 'C1'], ['A2', 'B2', 'C2'], ['A2', 'B3', 'C1'], ['A2', 'B3', 'C2'], ['A3', 'B1', 'C1'], ['A3', 'B1', 'C2'], ['A3', 'B2', 'C1'], ['A3', 'B2', 'C2'], ['A3', 'B3', 'C1'], ['A3', 'B3', 'C2'], ]
La solution utilise une approche récursive :
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; }
Cette fonction prend un tableau de tableaux en entrée et initialise un compteur récursif, $i, à zéro. Il vérifie si le tableau actuel à l'index $i existe et renvoie un tableau vide si ce n'est pas le cas. Si $i est égal au dernier index, cela signifie le cas de base et le tableau actuel est renvoyé.
Sinon, il appelle récursivement des combinaisons pour obtenir des combinaisons de tableaux suivants, stockés dans $tmp. Il initialise un tableau $result vide et parcourt le tableau actuel à l'index $i. Pour chaque élément de ce tableau, il le concatène avec chaque combinaison de $tmp, en ajoutant le résultat à $result.
Ce processus se déroule de manière récursive jusqu'à ce que toutes les combinaisons aient été générées. Le tableau résultant est renvoyé, représentant toutes les combinaisons possibles d'éléments dans les tableaux d'entrée.
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!