Rumah > pembangunan bahagian belakang > tutorial php > Bagaimana untuk Menjana Semua Gabungan daripada Pelbagai Tatasusunan dalam PHP Secara Rekursif?

Bagaimana untuk Menjana Semua Gabungan daripada Pelbagai Tatasusunan dalam PHP Secara Rekursif?

Linda Hamilton
Lepaskan: 2024-12-14 02:09:10
asal
789 orang telah melayarinya

How to Generate All Combinations from Multiple Arrays in PHP Recursively?

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

Kami menyasarkan untuk menjana tatasusunan 18 kombinasi:

[
    ['A1', 'B1', 'C1'],
    ['A1', 'B1', 'C2'],
    ['A1', 'B2', 'C1'],
    ...
]
Salin selepas log masuk

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

Demonstrasi

Kod berikut menunjukkan penggunaan fungsi gabungan:

print_r(
    combinations(
        array(
            array('A1','A2','A3'), 
            array('B1','B2','B3'), 
            array('C1','C2')
        )
    )
);
Salin selepas log masuk

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan