Mencari Semua Pilihatur bagi Tatasusunan PHP
Diberikan tatasusunan rentetan, seperti ['peter', 'paul', 'mary '], artikel ini menunjukkan cara menjana semua pilih atur yang mungkin bagi elemen tatasusunan. Dengan pengaturcaraan dengan PHP, anda boleh mencapai matlamat ini dengan pelbagai fungsi.
Satu pendekatan ialah menggunakan fungsi pc_permute, yang menggunakan algoritma rekursif untuk menjana pilih atur. Fungsi ini mengambil tatasusunan input sebagai hujah dan parameter pilihan untuk tatasusunan untuk menyimpan pilih atur. Ia melelar melalui tatasusunan input, menjana pilih atur baharu dengan mengalihkan elemen ke hadapan senarai dan secara rekursif memanggil dirinya sendiri dengan tatasusunan yang dikemas kini.
Berikut ialah coretan kod yang menggambarkan fungsi pc_permute dalam tindakan :
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);
Pendekatan lain ialah menggunakan Fungsi pc_next_permutation, yang menjana pilih atur menggunakan algoritma yang berbeza sedikit. Ia membandingkan elemen bersebelahan dalam tatasusunan dan menukarnya jika perlu untuk menjana pilih atur seterusnya dalam jujukan.
Berikut ialah coretan kod untuk fungsi 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"; }
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menjana Semua Pilihan Pilih Atur PHP yang Mungkin?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!