Maison >développement back-end >tutoriel php >Comment générer le produit cartésien de plusieurs tableaux en PHP ?

Comment générer le produit cartésien de plusieurs tableaux en PHP ?

Patricia Arquette
Patricia Arquetteoriginal
2024-11-12 10:40:02965parcourir

How to Generate the Cartesian Product of Multiple Arrays in 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!

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