Mengira Hasil Cartesan Berbilang Tatasusunan dalam PHP
Masalah:
Diberi berbilang PHP tatasusunan, bagaimana kita boleh menjana produk Cartesian yang menggabungkan semua kemungkinan kombinasi elemen daripada setiap tatasusunan, tidak termasuk ulangan?
Penyelesaian:
Untuk mendapatkan produk Cartesian dalam PHP, kita boleh mentakrifkan fungsi rekursif yang dipanggil array_cartesian. Fungsi ini mengambil tatasusunan tatasusunan input sebagai argumen. Kes asas berlaku apabila bilangan tatasusunan adalah sifar, dalam hal ini tatasusunan kosong di dalam tatasusunan dikembalikan. Jika tidak, fungsi menggunakan fungsi array_shift untuk mengalih keluar tatasusunan pertama daripada senarai, dan kemudian secara rekursif memanggil dirinya sendiri dengan tatasusunan yang selebihnya.
Untuk setiap elemen v dalam tatasusunan pertama, fungsi itu berulang melalui setiap sub-tatasusunan p dalam hasil darab Cartesian bagi tatasusunan yang tinggal. Ia kemudiannya membina sub-tatasusunan baharu dengan menggabungkan v dengan p, dan menambah sub-tatasusunan ini kepada hasil Cartesan yang terhasil.
Contoh:
Pertimbangkan set berikut daripada tatasusunan:
$array[0][0] = 'apples'; $array[0][1] = 'pears'; $array[0][2] = 'oranges'; $array[1][0] = 'steve'; $array[1][1] = 'bob';
Dengan menghantar tatasusunan ini kepada fungsi tatasusunan_kartesian, kita boleh mendapatkan produk Cartesian:
$cross = array_cartesian( array('apples', 'pears', 'oranges'), array('steve', 'bob') ); print_r($cross);
yang menghasilkan output berikut:
Array ( [0] => Array ( [0] => apples [1] => steve ) [1] => Array ( [0] => apples [1] => bob ) [2] => Array ( [0] => pears [1] => steve ) [3] => Array ( [0] => pears [1] => bob ) [4] => Array ( [0] => oranges [1] => steve ) [5] => Array ( [0] => oranges [1] => bob ) )
Oleh itu, fungsi ini menjana semua gabungan unik elemen daripada tatasusunan input.
Atas ialah kandungan terperinci Bagaimanakah saya boleh menjana produk Cartesian berbilang tatasusunan dalam PHP sambil menghapuskan ulangan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!