Heim >Backend-Entwicklung >PHP-Tutorial >Wie kann ich alle möglichen Permutationen eines PHP-Arrays generieren?
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!