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!