Heim >Backend-Entwicklung >PHP-Tutorial >Wie kann ich alle möglichen Permutationen eines PHP-Arrays generieren?

Wie kann ich alle möglichen Permutationen eines PHP-Arrays generieren?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-07 04:19:11272Durchsuche

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

Alle Permutationen eines PHP-Arrays finden

Gegeben ein Array von Zeichenfolgen, wie zum Beispiel ['peter', 'paul', 'mary '] zeigt dieser Artikel, wie alle möglichen Permutationen der Array-Elemente generiert werden. Durch die Programmierung mit PHP können Sie dieses Ziel mit verschiedenen Funktionen erreichen.

Ein Ansatz besteht darin, die Funktion pc_permute zu verwenden, die einen rekursiven Algorithmus zur Generierung der Permutationen verwendet. Die Funktion verwendet das Eingabearray als Argument und einen optionalen Parameter für ein Array zum Speichern der Permutationen. Es durchläuft das Eingabearray und generiert neue Permutationen, indem es Elemente an den Anfang der Liste verschiebt und sich selbst rekursiv mit dem aktualisierten Array aufruft.

Hier ist ein Codeausschnitt, der die Funktion pc_permute in Aktion zeigt :

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

Ein anderer Ansatz ist die Verwendung von pc_next_permutation-Funktion, die Permutationen mit einem etwas anderen Algorithmus generiert. Es vergleicht benachbarte Elemente im Array und tauscht sie bei Bedarf aus, um die nächste Permutation in der Sequenz zu generieren.

Hier ist ein Codeausschnitt für die Funktion 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";
}

Das obige ist der detaillierte Inhalt vonWie kann ich alle möglichen Permutationen eines PHP-Arrays generieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn