Rumah > Artikel > rangka kerja php > Menggunakan ThinkPHP6 untuk melaksanakan struktur pokok rekursif
Dengan pembangunan Internet, paparan berstruktur pokok telah muncul dalam pelbagai tapak web dan aplikasi, seperti direktori klasifikasi, struktur organisasi kakitangan, pengurusan kebenaran, dsb. Dalam senario aplikasi ini, struktur pokok rekursif telah menjadi salah satu model yang sangat penting dan praktikal.
ThinkPHP6 ialah rangka kerja pembangunan PHP berdasarkan model MVC Ia mempunyai perpustakaan sambungan yang kaya dan prestasi cemerlang, dan diiktiraf secara meluas dan digunakan oleh pembangun Pelaksanaan struktur pokok rekursif dalam ThinkPHP6 telah menjadi lebih Mudah.
Di bawah, kami akan memperkenalkan cara menggunakan fungsi rekursif untuk membina struktur pokok dalam ThinkPHP6.
1. Tentukan struktur pangkalan data
Sebelum melaksanakan struktur pokok rekursif, anda perlu mengetahui cara menyimpan data dalam pangkalan data supaya aplikasi dapat memprosesnya. Dalam contoh ini, kami akan membuat jadual "kategori" dan menyimpan maklumat seperti nama kategori, ID kategori, ID induk, dll. dalam jadual kategori.
Struktur jadual klasifikasi adalah seperti berikut:
id int(11) Kunci utama
nama varchar(50) Nama kategori
parent_id int(11) ID kategori induk
2. Laksanakan fungsi rekursif
Seterusnya, kita perlu melaksanakan fungsi rekursif untuk menanyakan semua nod anak bermula dari nod akar. Dalam ThinkPHP6, anda boleh menggunakan kaedah pilih yang digabungkan dengan parameter $where untuk menanyakan lajur yang ditentukan, contohnya:
Db::name('classification table')->where('parent_id',$id ) ->select();
Dalam contoh ini, $id ialah parameter yang dihantar kepada fungsi rekursif dan mewakili ID nod semasa. Fungsi rekursif akan menanya secara rekursif semua nod anak nod berdasarkan ID.
Berikut ialah pelaksanaan fungsi rekursif:
function getChildren($id){ //查询该节点下的所有子节点 $children=Db::name('分类表')->where('parent_id',$id)->select(); //如果没有子节点,返回空数组 if(empty($children)){ return $children; } //递归查询子节点的子节点,并将结果合并到$children数组中 foreach($children as $k=>$v){ $children[$k]['children']=$this->getChildren($v['id']); } return $children; }
Dalam fungsi ini, kami mula-mula menanyakan semua nod anak di bawah nod dan menyimpan hasilnya dalam tatasusunan $children. Jika nod tidak mempunyai nod anak, tatasusunan kosong dikembalikan secara langsung.
Seterusnya, kami menggunakan gelung foreach untuk lelaran melalui setiap nod anak dalam tatasusunan $children dan memanggil fungsi rekursif untuk menanyakan semua nod anak nod anak tersebut. Gabungkan hasil ke dalam tatasusunan $children, akhirnya mengembalikan keseluruhan tatasusunan $children.
3. Output struktur pokok
Selepas fungsi rekursif memperoleh maklumat nod dan semua nod anaknya, kita perlu mengeluarkannya sebagai struktur pokok. Ini boleh dicapai dengan menggelung melalui tatasusunan yang dikembalikan oleh fungsi rekursif dan mengeluarkan simbol lekukan yang sepadan berdasarkan kedalaman setiap nod.
Berikut ialah kod untuk mengeluarkan struktur pokok:
function outputTree($arr,$deep=0){ //定义缩进符号 $symbol='|--'; $html=''; foreach($arr as $v){ //根据节点深度输出缩进符号 $html.=str_repeat(' ',$deep).$symbol.$v['name'].'<br/>'; //如果有子节点,继续遍历 if(!empty($v['children'])){ $html.=$this->outputTree($v['children'],$deep+1); } } return $html; }
Dalam fungsi ini, kita mula-mula mentakrifkan simbol lekukan, dan kemudian melintasi setiap nod dalam tatasusunan secara rekursif. Mengeluarkan bilangan simbol lekukan yang sepadan berdasarkan kedalaman nod semasa. Jika nod mempunyai nod anak, teruskan melintasi semua nod anak secara rekursif.
Akhir sekali, kod untuk mengeluarkan keseluruhan struktur pokok adalah seperti berikut:
$id=0; $arr=$this->getChildren($id); $html=$this->outputTree($arr); echo $html;
Dalam kod ini, $id mewakili ID nod akar Kami mula-mula memanggil fungsi rekursif untuk mendapatkan maklumat semua nod anak, Kemudian panggil fungsi yang mengeluarkan struktur pokok untuk mengeluarkan keseluruhan struktur pokok ke halaman HTML.
4. Ringkasan
Dengan menggunakan perpustakaan sambungan kaya ThinkPHP6 dan fungsi rekursif, kami boleh membina struktur pokok rekursif dengan mudah, menjadikan aplikasi lebih mudah untuk diurus dan digunakan. Saya harap artikel ini dapat membantu anda dengan kerja pembangunan anda apabila membina struktur pokok, membolehkan anda menyelesaikan tugas dengan lebih cekap.
Atas ialah kandungan terperinci Menggunakan ThinkPHP6 untuk melaksanakan struktur pokok rekursif. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!