Rumah > rangka kerja php > ThinkPHP > Menggunakan ThinkPHP6 untuk melaksanakan struktur pokok rekursif

Menggunakan ThinkPHP6 untuk melaksanakan struktur pokok rekursif

王林
Lepaskan: 2023-06-20 14:48:10
asal
1136 orang telah melayarinya

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

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

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

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!

Label berkaitan:
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan