Maison  >  Article  >  développement back-end  >  Comment générer toutes les combinaisons possibles à partir d’un tableau 1D en PHP ?

Comment générer toutes les combinaisons possibles à partir d’un tableau 1D en PHP ?

DDD
DDDoriginal
2024-10-30 16:38:02489parcourir

 How to Generate All Possible Combinations from a 1D Array in PHP?

PHP : Récupération de toutes les combinaisons possibles d'un tableau 1D

Introduction

La tâche La possibilité de récupérer toutes les combinaisons possibles d'éléments à partir d'un tableau 1D peut être rencontrée dans diverses applications de programmation. Cela nécessite une compréhension globale des approches itératives ou récursives pour dériver toutes les permutations possibles.

Approche itérative

Une méthode implique l'utilisation d'une approche itérative, comme démontré dans le code suivant :

<code class="php">function getCombinations($arr) {
    $result = array();
    $count = count($arr);
    for ($i = 0; $i < (1 << $count); $i++) {
        $combination = array();
        for ($j = 0; $j < $count; $j++) {
            if (($i & (1 << $j)) != 0) {
                $combination[] = $arr[$j];
            }
        }
        $result[] = $combination;
    }
    return $result;
}

$array = array('Alpha', 'Beta', 'Gamma');
$combinations = getCombinations($array);

print_r($combinations);

Sortie :

Array
(
    [0] => Array
        (
        )

    [1] => Array
        (
            [0] => Alpha
        )

    [2] => Array
        (
            [0] => Beta
        )

    [3] => Array
        (
            [0] => Alpha
            [1] => Beta
        )

    [4] => Array
        (
            [0] => Gamma
        )

    [5] => Array
        (
            [0] => Alpha
            [1] => Gamma
        )

    [6] => Array
        (
            [0] => Beta
            [1] => Gamma
        )

    [7] => Array
        (
            [0] => Alpha
            [1] => Beta
            [2] => Gamma
        )

)</code>

Explication :

Cette solution itérative utilise la manipulation de bits pour générer tous combinaisons possibles. En incrémentant la valeur de $i sur toutes les valeurs possibles entre 0 et (1 << $count) - 1, la configuration binaire correspondant à chaque combinaison est établie. Vérifier si un bit spécifique de ce modèle est défini permet de déterminer quels éléments du tableau d'entrée appartiennent à la combinaison actuelle.

Approche récursive

Alternativement, une approche récursive L'approche peut être utilisée pour obtenir le même résultat :

<code class="php">function getCombinations($arr, $prefix = '') {
    $result = array();
    foreach ($arr as $element) {
        $result[] = $prefix . $element;
        $result = array_merge($result, getCombinations($arr, $prefix . $element . ' '));
    }
    return $result;
}

$array = array('Alpha', 'Beta', 'Gamma');
$combinations = getCombinations($array);

print_r($combinations);

Sortie :

Array
(
    [0] => Alpha
    [1] => Alpha Beta
    [2] => Alpha Beta Gamma
    [3] => Alpha Gamma
    [4] => Alpha Gamma Beta
    [5] => Beta
    [6] => Beta Alpha
    [7] => Beta Alpha Gamma
    [8] => Beta Gamma
    [9] => Beta Gamma Alpha
    [10] => Gamma
    [11] => Gamma Alpha
    [12] => Gamma Alpha Beta
    [13] => Gamma Beta
    [14] => Gamma Beta Alpha
)

Explication :

Cette solution récursive génère des combinaisons en ajoutant successivement des éléments au préfixe et en récursif sur les éléments restants du tableau. Le cas de base se produit lorsque le tableau est vide, ce qui donne une combinaison valide. Les combinaisons sont ensuite renvoyées dans l'ordre inverse.

En utilisant une approche itérative ou récursive, les développeurs peuvent récupérer efficacement toutes les combinaisons possibles d'éléments d'un tableau 1D, répondant aux diverses exigences des différents scénarios de programmation.

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