Maison  >  Article  >  développement back-end  >  Comment générer des produits cartésiens de plusieurs tableaux en PHP ?

Comment générer des produits cartésiens de plusieurs tableaux en PHP ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-15 14:03:03157parcourir

How to Generate Cartesian Products of Multiple Arrays in PHP?

Création de produits cartésiens de plusieurs tableaux en PHP

Considérez une structure de tableau PHP comme la suivante :

$array[0][0] = 'apples';
$array[0][1] = 'pears';
$array[0][2] = 'oranges';

$array[1][0] = 'steve';
$array[1][1] = 'bob';

Objectif : Générer une liste tabulée de toutes les combinaisons possibles d'éléments de ces tableaux, sans duplication.

Solution :

Le concept de génération de toutes les combinaisons possibles à partir de plusieurs tableaux est connu sous le nom de « produit cartésien ». Il existe plusieurs méthodes pour y parvenir en PHP.

Une approche consiste à utiliser les fonctions de tableau de PHP. L'extrait de code suivant implémente le produit cartésien en utilisant func_get_args() et la récursion :

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;
}

Pour utiliser cette fonction, transmettez un nombre arbitraire de tableaux comme arguments. Par exemple, pour générer le produit cartésien des tableaux ci-dessus :

$cross = array_cartesian(
    array('apples', 'pears',  'oranges'),
    array('steve', 'bob')
);

Le résultat, stocké dans $cross, sera un tableau contenant toutes les combinaisons possibles :

print_r($cross);

Sortie :

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 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn