Rumah >pembangunan bahagian belakang >tutorial php >Bagaimana dengan Cekap Menukar Senarai Tatasusunan Rata ke dalam Struktur Pokok Hierarki?

Bagaimana dengan Cekap Menukar Senarai Tatasusunan Rata ke dalam Struktur Pokok Hierarki?

Barbara Streisand
Barbara Streisandasal
2024-11-29 14:41:10695semak imbas

How to Efficiently Convert a Flat Array List into a Hierarchical Tree Structure?

Menukar Senarai Tatasusunan kepada Struktur Pokok

Dalam masalah ini, kami ditugaskan untuk mengubah tatasusunan rata elemen menjadi struktur seperti pokok hierarki. Tatasusunan input terdiri daripada objek dengan tiga sifat: id, induk dan nama. Output mestilah struktur pepohon di mana setiap nod mewakili elemen dalam tatasusunan input dan mempunyai senarai nod anak kepunyaannya.

Untuk menyelesaikan masalah ini, kita tidak boleh bergantung pada kaedah seperti set bersarang kerana kekangan pangkalan data. Sebaliknya, kami menggunakan algoritma rekursif untuk membina pepohon.

$arr = array(
    array('id' => 100, 'parentid' => 0, 'name' => 'a'),
    array('id' => 101, 'parentid' => 100, 'name' => 'a'),
    array('id' => 102, 'parentid' => 101, 'name' => 'a'),
    array('id' => 103, 'parentid' => 101, 'name' => 'a'),
);

$new = array();
foreach ($arr as $a) {
    $new[$a['parentid']][] = $a;
}
$tree = createTree($new, array($arr[0]));

Dalam langkah pertama, kami melingkari tatasusunan input dan elemen kumpulan oleh induk mereka untuk mencipta tatasusunan baharu di mana setiap kunci mewakili id ​​ibu bapa , dan nilainya ialah tatasusunan anak-anaknya. Selepas itu, kami menggunakan fungsi pembantu createTree untuk membina pepohon secara rekursif.

function createTree(&$list, $parent) {
    $tree = array();
    foreach ($parent as $k => $l) {
        if (isset($list[$l['id']])) {
            $l['children'] = createTree($list, $list[$l['id']]);
        }
        $tree[] = $l;
    }
    return $tree;
}

Fungsi createTree mengambil dua parameter: tatasusunan $list tersusun semula dan tatasusunan $induk yang mewakili tahap semasa dalam pepohon. Dalam fungsi tersebut, kami mengulangi tatasusunan $parent dan memeriksa jika $list mengandungi mana-mana kanak-kanak untuk elemen semasa. Jika kanak-kanak ditemui, kami secara rekursif memanggil createTree untuk membina subpokok bagi elemen itu dan menambahkannya sebagai harta kanak-kanak bagi elemen semasa. Akhir sekali, kami menambahkan elemen semasa pada tatasusunan $tree dan mengembalikan pepohon.

Dengan mengikuti algoritma ini, kami boleh membina struktur pepohon dengan cekap daripada senarai tatasusunan yang disediakan, menjana perwakilan bersarang bagi perhubungan hierarki antara unsur-unsur.

Atas ialah kandungan terperinci Bagaimana dengan Cekap Menukar Senarai Tatasusunan Rata ke dalam Struktur Pokok Hierarki?. 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