Maison >développement back-end >tutoriel php >Comment puis-je générer efficacement toutes les combinaisons possibles d'éléments à partir de plusieurs tableaux PHP de différentes longueurs ?

Comment puis-je générer efficacement toutes les combinaisons possibles d'éléments à partir de plusieurs tableaux PHP de différentes longueurs ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-12 10:33:11643parcourir

How can I efficiently generate all possible combinations of elements from multiple PHP arrays of varying lengths?

Génération de combinaisons d'éléments dans plusieurs tableaux PHP

Lorsqu'il s'agit de plusieurs tableaux de longueurs variables, il devient difficile de générer toutes les combinaisons possibles de leurs éléments. Cet article résout ce problème en fournissant une solution PHP polyvalente.

La tâche consiste à créer une fonction qui accepte un nombre arbitraire de tableaux et génère un tableau contenant toutes les combinaisons possibles de leurs éléments. Par exemple, étant donné trois tableaux :

$arrayA = array('A1', 'A2', 'A3');
$arrayB = array('B1', 'B2', 'B3');
$arrayC = array('C1', 'C2');

Le résultat souhaité serait un tableau de 18 combinaisons :

[
    ['A1', 'B1', 'C1'],
    ['A1', 'B1', 'C2'],
    ['A1', 'B2', 'C1'],
    ['A1', 'B2', 'C2'],
    ['A1', 'B3', 'C1'],
    ['A1', 'B3', 'C2'],
    ['A2', 'B1', 'C1'],
    ['A2', 'B1', 'C2'],
    ['A2', 'B2', 'C1'],
    ['A2', 'B2', 'C2'],
    ['A2', 'B3', 'C1'],
    ['A2', 'B3', 'C2'],
    ['A3', 'B1', 'C1'],
    ['A3', 'B1', 'C2'],
    ['A3', 'B2', 'C1'],
    ['A3', 'B2', 'C2'],
    ['A3', 'B3', 'C1'],
    ['A3', 'B3', 'C2'],
]

La solution utilise une approche récursive :

function combinations($arrays, $i = 0) {
    if (!isset($arrays[$i])) {
        return array();
    }
    if ($i == count($arrays) - 1) {
        return $arrays[$i];
    }

    // get combinations from subsequent arrays
    $tmp = combinations($arrays, $i + 1);

    $result = array();

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

Cette fonction prend un tableau de tableaux en entrée et initialise un compteur récursif, $i, à zéro. Il vérifie si le tableau actuel à l'index $i existe et renvoie un tableau vide si ce n'est pas le cas. Si $i est égal au dernier index, cela signifie le cas de base et le tableau actuel est renvoyé.

Sinon, il appelle récursivement des combinaisons pour obtenir des combinaisons de tableaux suivants, stockés dans $tmp. Il initialise un tableau $result vide et parcourt le tableau actuel à l'index $i. Pour chaque élément de ce tableau, il le concatène avec chaque combinaison de $tmp, en ajoutant le résultat à $result.

Ce processus se déroule de manière récursive jusqu'à ce que toutes les combinaisons aient été générées. Le tableau résultant est renvoyé, représentant toutes les combinaisons possibles d'éléments dans les tableaux d'entrée.

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