Maison  >  Article  >  développement back-end  >  Comment puis-je générer toutes les combinaisons et permutations possibles d’éléments dans un tableau unidimensionnel en PHP ?

Comment puis-je générer toutes les combinaisons et permutations possibles d’éléments dans un tableau unidimensionnel en PHP ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-01 19:45:30950parcourir

How can I generate all possible combinations and permutations of elements within a one-dimensional array in PHP?

PHP : Comment obtenir toutes les combinaisons possibles d'un tableau unidimensionnel

Dans cet article, nous allons plonger dans une méthode pour récupérer toutes les combinaisons possibles d'éléments au sein un tableau unidimensionnel en PHP. Contrairement à d'autres solutions, cette approche garantit que les combinaisons et les permutations sont prises en compte.

Énoncé du problème

Étant donné un tableau de chaînes ou de nombres, l'objectif est de générer toutes les combinaisons possibles d'éléments, en tenant compte des différentes dispositions. Par exemple, « Alpha Beta » et « Beta Alpha » sont des combinaisons distinctes qui doivent être incluses dans le résultat.

Solution PHP

La solution PHP fournie utilise un algorithme de recherche récursif en profondeur :

<code class="php"><?php

$array = array('Alpha', 'Beta', 'Gamma', 'Sigma');

function depth_picker($arr, $temp_string, &amp;$collect) {
    if ($temp_string != "") 
        $collect []= $temp_string;

    for ($i=0, $iMax = sizeof($arr); $i < $iMax; $i++) {
        $arrcopy = $arr;
        $elem = array_splice($arrcopy, $i, 1); // removes and returns the i'th element
        if (sizeof($arrcopy) > 0) {
            depth_picker($arrcopy, $temp_string ." " . $elem[0], $collect);
        } else {
            $collect []= $temp_string. " " . $elem[0];
        }   
    }   
}

$collect = array();
depth_picker($array, "", $collect);
print_r($collect);

?></code>

Décomposition de la solution

  • La fonction deep_picker est invoquée avec le tableau initial, une chaîne vide et une référence de tableau vide.
  • Elle est récursive parcourt le tableau, ajoutant chaque élément à la fin de la chaîne de résultat actuelle.
  • Chaque fois que la chaîne temporaire contient des éléments, elle est ajoutée au tableau de résultat.
  • S'il reste encore des éléments dans le tableau d'entrée, la fonction s'appelle avec le tableau mis à jour et la chaîne temporaire.
  • S'il ne reste plus d'éléments, la chaîne temporaire contenant la combinaison complète est ajoutée au tableau de collecte.

Sortie

Le code fourni produit la sortie suivante, qui contient toutes les combinaisons et permutations des éléments du tableau donné :

Array
(
    [0] =>  Alpha
    [1] =>  Alpha Beta
    [2] =>  Alpha Beta Gamma
    [3] =>  Alpha Beta Gamma Sigma
    [4] =>  Alpha Beta Sigma
    [5] =>  Alpha Beta Sigma Gamma
    [6] =>  Alpha Gamma
    [7] =>  Alpha Gamma Beta
    [8] =>  Alpha Gamma Beta Sigma
    [9] =>  Alpha Gamma Sigma
    [10] =>  Alpha Gamma Sigma Beta
    [11] =>  Alpha Sigma
    [12] =>  Alpha Sigma Beta
    [13] =>  Alpha Sigma Beta Gamma
    [14] =>  Alpha Sigma Gamma
    [15] =>  Alpha Sigma Gamma Beta
    [16] =>  Beta
    [17] =>  Beta Alpha
    [18] =>  Beta Alpha Gamma
    [19] =>  Beta Alpha Gamma Sigma
    [20] =>  Beta Alpha Sigma
    [21] =>  Beta Alpha Sigma Gamma
    [22] =>  Beta Gamma
    [23] =>  Beta Gamma Alpha
    [24] =>  Beta Gamma Alpha Sigma
    [25] =>  Beta Gamma Sigma
    [26] =>  Beta Gamma Sigma Alpha
    [27] =>  Beta Sigma
    [28] =>  Beta Sigma Alpha
    [29] =>  Beta Sigma Alpha Gamma
    [30] =>  Beta Sigma Gamma
    [31] =>  Beta Sigma Gamma Alpha
    [32] =>  Gamma
    [33] =>  Gamma Alpha
    [34] =>  Gamma Alpha Beta
    [35] =>  Gamma Alpha Beta Sigma
    [36] =>  Gamma Alpha Sigma
    [37] =>  Gamma Alpha Sigma Beta
    [38] =>  Gamma Beta
    [39] =>  Gamma Beta Alpha
    [40] =>  Gamma Beta Alpha Sigma
    [41] =>  Gamma Beta Sigma
    [42] =>  Gamma Beta Sigma Alpha
    [43] =>  Gamma Sigma
    [44] =>  Gamma Sigma Alpha
    [45] =>  Gamma Sigma Alpha Beta
    [46] =>  Gamma Sigma Beta
    [47] =>  Gamma Sigma Beta Alpha
    [48] =>  Sigma
    [49] =>  Sigma Alpha
    [50] =>  Sigma Alpha Beta
    [51] =>  Sigma Alpha Beta Gamma
    [52] =>  Sigma Alpha Gamma
    [53] =>  Sigma Alpha Gamma Beta
    [54] =>  Sigma Beta
    [55] =>  Sigma Beta Alpha
    [56] =>  Sigma Beta Alpha Gamma
    [57] =>  Sigma Beta Gamma
    [58] =>  Sigma Beta Gamma Alpha
    [59] =>  Sigma Gamma
    [60] =>  Sigma Gamma Alpha
    [61] =>  Sigma Gamma Alpha Beta
    [62] =>  Sigma Gamma Beta
    [63] =>  Sigma Gamma Beta Alpha
)

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