Maison >développement back-end >tutoriel php >Comment générer le produit cartésien de plusieurs tableaux en PHP ?
Générer le produit cartésien de plusieurs tableaux en PHP
Introduction :
Produire des combinaisons à partir de plusieurs tableaux est une tâche courante en programmation. Le produit cartésien de ces tableaux est une liste de toutes les combinaisons possibles d'éléments des tableaux d'entrée.
Problème :
Étant donné un tableau avec plusieurs sous-tableaux, nous voulons générer un tableau contenant toutes les combinaisons uniques d'éléments de ces sous-tableaux. Par exemple, si nous avons deux sous-tableaux :
$array[0][0] = 'apples'; $array[0][1] = 'pears'; $array[0][2] = 'oranges'; $array[1][0] = 'steve'; $array[1][1] = 'bob';
Nous nous attendons à ce que le résultat soit :
Array 0 Array 1 apples steve apples bob pears steve pears bob
Solution : produit cartésien
Ce problème nécessite calculer le produit cartésien, qui génère toutes les combinaisons possibles d'éléments à partir de plusieurs tableaux.
Mise en œuvre :
Une approche pour calculer le produit cartésien consiste à utiliser une fonction récursive. Voici un exemple d'implémentation :
function array_cartesian() { $_ = func_get_args(); if(count($_) == 0) return array(array()); $a = array_shift($_); $c = call_user_func_array(__FUNCTION__, $_); $r = array(); foreach($a as $v) foreach($c as $p) $r[] = array_merge(array($v), $p); return $r; }
Cette fonction prend plusieurs tableaux comme entrées. Il parcourt le premier tableau et combine chacun de ses éléments avec toutes les combinaisons possibles des tableaux restants. Le résultat est une liste de toutes les combinaisons uniques.
Exemple :
Appliquons la solution à notre exemple :
$cross = array_cartesian( array('apples', 'pears', 'oranges'), array('steve', 'bob') ); print_r($cross);
Cela affichera :
Array ( [0] => Array ( [0] => apples [1] => steve ) [1] => Array ( [0] => apples [1] => bob ) [2] => Array ( [0] => pears [1] => steve ) [3] => Array ( [0] => pears [1] => bob ) )
Ce qui correspond à notre résultat attendu.
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!