Menjana Gabungan daripada Pelbagai Tatasusunan dalam PHP
Pengenalan
Tugas menjana semua gabungan item daripada berbilang tatasusunan sering ditemui semasa masalah pengoptimuman gabungan. Artikel ini membentangkan penyelesaian rekursif yang menangani keperluan untuk fungsi yang boleh mengendalikan bilangan pembolehubah tatasusunan sumber.
Pernyataan Masalah
Diberikan beberapa tatasusunan dengan nombor yang berbeza elemen, cari semua gabungan item, di mana bilangan gabungan sama dengan hasil darab bilangan elemen dalam setiap tatasusunan. Sebagai contoh, diberikan tatasusunan berikut:
$arrayA = array('A1','A2','A3'); $arrayB = array('B1','B2','B3'); $arrayC = array('C1','C2');
Kami menyasarkan untuk menjana tatasusunan 18 kombinasi:
[ ['A1', 'B1', 'C1'], ['A1', 'B1', 'C2'], ['A1', 'B2', 'C1'], ... ]
Penyelesaian Rekursif
Fungsi rekursif berikut menjana semua kemungkinan kombinasi item:
function combinations($arrays, $i = 0) { // If reaching the last array, return the array itself if (!isset($arrays[$i])) { return array(); } // If at the parent array, return the recursive call to the following array if ($i == count($arrays) - 1) { return $arrays[$i]; } // Get combinations from subsequent arrays $tmp = combinations($arrays, $i + 1); $result = array(); // Concatenate each array from tmp with each element from $arrays[$i] foreach ($arrays[$i] as $v) { foreach ($tmp as $t) { $result[] = is_array($t) ? array_merge(array($v), $t) : array($v, $t); } } return $result; }
Demonstrasi
Kod berikut menunjukkan penggunaan fungsi gabungan:
print_r( combinations( array( array('A1','A2','A3'), array('B1','B2','B3'), array('C1','C2') ) ) );
Ini akan mengeluarkan tatasusunan yang dijangkakan daripada 18 kombinasi.
Atas ialah kandungan terperinci Bagaimana untuk Menjana Semua Gabungan daripada Pelbagai Tatasusunan dalam PHP Secara Rekursif?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!