Maison > développement back-end > tutoriel php > Comment puis-je générer toutes les permutations possibles d'un tableau PHP ?

Comment puis-je générer toutes les permutations possibles d'un tableau PHP ?

Mary-Kate Olsen
Libérer: 2024-12-07 04:19:11
original
267 Les gens l'ont consulté

How Can I Generate All Possible Permutations of a PHP Array?

Trouver toutes les permutations d'un tableau PHP

Étant donné un tableau de chaînes, telles que ['peter', 'paul', 'mary '], cet article montre comment générer toutes les permutations possibles des éléments du tableau. En programmant avec PHP, vous pouvez atteindre cet objectif avec diverses fonctions.

Une approche consiste à utiliser la fonction pc_permute, qui utilise un algorithme récursif pour générer les permutations. La fonction prend le tableau d'entrée comme argument et paramètre facultatif pour qu'un tableau stocke les permutations. Il parcourt le tableau d'entrée, générant de nouvelles permutations en déplaçant les éléments au début de la liste et en s'appelant récursivement avec le tableau mis à jour.

Voici un extrait de code illustrant la fonction pc_permute en action. :

function pc_permute($items, $perms = array()) {
    if (empty($items)) { 
        echo join(' ', $perms) . "<br />";
    } else {
        for ($i = count($items) - 1; $i >= 0; --$i) {
             $newitems = $items;
             $newperms = $perms;
             list($foo) = array_splice($newitems, $i, 1);
             array_unshift($newperms, $foo);
             pc_permute($newitems, $newperms);
         }
    }
}

$arr = array('peter', 'paul', 'mary');

pc_permute($arr);
Copier après la connexion

Une autre approche consiste à utiliser le Fonction pc_next_permutation, qui génère des permutations en utilisant un algorithme légèrement différent. Il compare les éléments adjacents dans le tableau et les échange si nécessaire pour générer la permutation suivante dans la séquence.

Voici un extrait de code pour la fonction pc_next_permutation :

function pc_next_permutation($p, $size) {
    // slide down the array looking for where we're smaller than the next guy
    for ($i = $size - 1; $p[$i] >= $p[$i+1]; --$i) { }

    // if this doesn't occur, we've finished our permutations
    // the array is reversed: (1, 2, 3, 4) => (4, 3, 2, 1)
    if ($i == -1) { return false; }

    // slide down the array looking for a bigger number than what we found before
    for ($j = $size; $p[$j] <= $p[$i]; --$j) { }

    // swap them
    $tmp = $p[$i]; $p[$i] = $p[$j]; $p[$j] = $tmp;

    // now reverse the elements in between by swapping the ends
    for (++$i, $j = $size; $i < $j; ++$i, --$j) {
         $tmp = $p[$i]; $p[$i] = $p[$j]; $p[$j] = $tmp;
    }

    return $p;
}

$set = split(' ', 'she sells seashells'); // like array('she', 'sells', 'seashells')
$size = count($set) - 1;
$perm = range(0, $size);
$j = 0;

do { 
     foreach ($perm as $i) { $perms[$j][] = $set[$i]; }
} while ($perm = pc_next_permutation($perm, $size) and ++$j);

foreach ($perms as $p) {
    print join(' ', $p) . "\n";
}
Copier après la connexion

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