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
Linda Hamiltonasal
2024-12-14 02:09:10791semak imbas

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');

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!

Kenyataan:
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