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
Linda Hamiltonoriginal
2024-12-14 02:09:10791parcourir

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');

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

[
    ['A1', 'B1', 'C1'],
    ['A1', 'B1', 'C2'],
    ['A1', 'B2', 'C1'],
    ...
]

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

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')
        )
    )
);

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!

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