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
Libérer: 2024-11-12 10:40:02
original
1016 Les gens l'ont consulté

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';
Copier après la connexion

Nous nous attendons à ce que le résultat soit :

Array 0            Array 1
apples             steve
apples             bob
pears              steve
pears              bob
Copier après la connexion

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;
}
Copier après la connexion

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);
Copier après la connexion

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
        )
)
Copier après la connexion

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 de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal