Maison > développement back-end > tutoriel php > Comment générer récursivement toutes les combinaisons à partir de plusieurs tableaux en PHP ?

Comment générer récursivement toutes les combinaisons à partir de plusieurs tableaux en PHP ?

Linda Hamilton
Libérer: 2024-12-14 02:09:10
original
790 Les gens l'ont consulté

How to Generate All Combinations from Multiple Arrays in PHP Recursively?

Génération de combinaisons à partir de plusieurs tableaux en PHP

Introduction

La tâche de générer toutes les combinaisons d'éléments provenant de plusieurs tableaux est souvent rencontré lors de problèmes d'optimisation combinatoire. Cet article présente une solution récursive qui répond au besoin d'une fonction capable de gérer un nombre variable de tableaux sources.

Énoncé du problème

Étant donné plusieurs tableaux avec différents nombres de éléments, recherchez toutes les combinaisons d’éléments, où le nombre de combinaisons est égal au produit du nombre d’éléments dans chaque tableau. Par exemple, étant donné les tableaux suivants :

$arrayA = array('A1','A2','A3');
$arrayB = array('B1','B2','B3');
$arrayC = array('C1','C2');
Copier après la connexion

Nous visons à générer un tableau de 18 combinaisons :

[
    ['A1', 'B1', 'C1'],
    ['A1', 'B1', 'C2'],
    ['A1', 'B2', 'C1'],
    ...
]
Copier après la connexion

Solution récursive

La fonction récursive suivante génère toutes les combinaisons possibles de items :

function combinations($arrays, $i = 0) {
    // If reaching the last array, return the array itself
    if (!isset($arrays[$i])) {
        return array();
    }
    
    // If at the parent array, return the recursive call to the following array
    if ($i == count($arrays) - 1) {
        return $arrays[$i];
    }
    
    // Get combinations from subsequent arrays
    $tmp = combinations($arrays, $i + 1);

    $result = array();

    // Concatenate each array from tmp with each element from $arrays[$i]
    foreach ($arrays[$i] as $v) {
        foreach ($tmp as $t) {
            $result[] = is_array($t) ? 
                array_merge(array($v), $t) :
                array($v, $t);
        }
    }
    
    return $result;
}
Copier après la connexion

Démonstration

Le code suivant démontre l'utilisation de la fonction de combinaisons :

print_r(
    combinations(
        array(
            array('A1','A2','A3'), 
            array('B1','B2','B3'), 
            array('C1','C2')
        )
    )
);
Copier après la connexion

Cela affichera le tableau attendu de 18 combinaisons.

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