Maison > développement back-end > tutoriel php > 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
Libérer: 2024-11-15 14:03:03
original
230 Les gens l'ont consulté

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

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

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

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

print_r($cross);
Copier après la connexion

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

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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal