Rumah > pembangunan bahagian belakang > tutorial php > Bagaimanakah saya boleh menjana produk Cartesian berbilang tatasusunan dalam PHP sambil menghapuskan ulangan?

Bagaimanakah saya boleh menjana produk Cartesian berbilang tatasusunan dalam PHP sambil menghapuskan ulangan?

DDD
Lepaskan: 2024-11-26 03:19:09
asal
242 orang telah melayarinya

How can I generate the Cartesian product of multiple arrays in PHP while eliminating repetitions?

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';
Salin selepas log masuk

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);
Salin selepas log masuk

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
        )

)
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan