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

Menggunakan ThinkPHP6 untuk melaksanakan struktur pokok rekursif

Jun 20, 2023 pm 02:48 PM
thinkphp rekursi struktur pokok

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!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Pelaksanaan rekursif fungsi C++: Adakah terdapat had untuk kedalaman rekursif? Pelaksanaan rekursif fungsi C++: Adakah terdapat had untuk kedalaman rekursif? Apr 23, 2024 am 09:30 AM

Kedalaman rekursi fungsi C++ adalah terhad, dan melebihi had ini akan mengakibatkan ralat limpahan tindanan. Nilai had berbeza antara sistem dan penyusun, tetapi biasanya antara 1,000 dan 10,000. Penyelesaian termasuk: 1. Pengoptimuman rekursi ekor; 2. Panggilan ekor;

Bagaimana untuk menjalankan projek thinkphp Bagaimana untuk menjalankan projek thinkphp Apr 09, 2024 pm 05:33 PM

Untuk menjalankan projek ThinkPHP, anda perlu: memasang Komposer untuk mencipta projek, masukkan direktori projek dan laksanakan php bin/console serve;

Adakah ungkapan lambda C++ menyokong rekursi? Adakah ungkapan lambda C++ menyokong rekursi? Apr 17, 2024 pm 09:06 PM

Ya, ungkapan Lambda C++ boleh menyokong rekursi dengan menggunakan std::function: Gunakan std::function untuk menangkap rujukan kepada ungkapan Lambda. Dengan rujukan yang ditangkap, ungkapan Lambda boleh memanggil dirinya secara rekursif.

Terdapat beberapa versi thinkphp Terdapat beberapa versi thinkphp Apr 09, 2024 pm 06:09 PM

ThinkPHP mempunyai berbilang versi yang direka untuk versi PHP yang berbeza. Versi utama termasuk 3.2, 5.0, 5.1 dan 6.0, manakala versi kecil digunakan untuk membetulkan pepijat dan menyediakan ciri baharu. Versi stabil terkini ialah ThinkPHP 6.0.16. Apabila memilih versi, pertimbangkan versi PHP, keperluan ciri dan sokongan komuniti. Adalah disyorkan untuk menggunakan versi stabil terkini untuk prestasi dan sokongan terbaik.

Bagaimana untuk menjalankan thinkphp Bagaimana untuk menjalankan thinkphp Apr 09, 2024 pm 05:39 PM

Langkah-langkah untuk menjalankan ThinkPHP Framework secara setempat: Muat turun dan nyahzip ThinkPHP Framework ke direktori tempatan. Buat hos maya (pilihan) yang menunjuk ke direktori akar ThinkPHP. Konfigurasikan parameter sambungan pangkalan data. Mulakan pelayan web. Mulakan aplikasi ThinkPHP. Akses URL aplikasi ThinkPHP dan jalankannya.

Pelaksanaan rekursif fungsi C++: Analisis perbandingan algoritma rekursif dan bukan rekursif? Pelaksanaan rekursif fungsi C++: Analisis perbandingan algoritma rekursif dan bukan rekursif? Apr 22, 2024 pm 03:18 PM

Algoritma rekursif menyelesaikan masalah berstruktur melalui fungsi panggilan kendiri Kelebihannya ialah ia mudah dan mudah difahami, tetapi kelemahannya ialah ia kurang cekap dan boleh menyebabkan limpahan timbunan Algoritma bukan rekursif mengelakkan pengulangan dengan menguruskan secara eksplisit struktur data timbunan Kelebihannya ialah ia lebih cekap dan mengelakkan limpahan, kelemahannya ialah kod itu mungkin lebih kompleks. Pilihan rekursif atau bukan rekursif bergantung kepada masalah dan kekangan khusus pelaksanaan.

Mana yang lebih baik, laravel atau thinkphp? Mana yang lebih baik, laravel atau thinkphp? Apr 09, 2024 pm 03:18 PM

Perbandingan prestasi rangka kerja Laravel dan ThinkPHP: ThinkPHP umumnya berprestasi lebih baik daripada Laravel, memfokuskan pada pengoptimuman dan caching. Laravel berfungsi dengan baik, tetapi untuk aplikasi yang kompleks, ThinkPHP mungkin lebih sesuai.

Bagaimana untuk memasang thinkphp Bagaimana untuk memasang thinkphp Apr 09, 2024 pm 05:42 PM

Langkah pemasangan ThinkPHP: Sediakan persekitaran PHP, Komposer dan MySQL. Buat projek menggunakan Komposer. Pasang rangka kerja dan kebergantungan ThinkPHP. Konfigurasikan sambungan pangkalan data. Hasilkan kod aplikasi. Lancarkan aplikasi dan lawati http://localhost:8000.

See all articles