cari
Rumahrangka kerja phpThinkPHPMenggunakan ThinkPHP6 untuk melaksanakan struktur pokok rekursif

Menggunakan ThinkPHP6 untuk melaksanakan struktur pokok rekursif

Jun 20, 2023 pm 02:48 PM
thinkphprekursistruktur 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;
} 

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!

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
Apakah ciri-ciri utama rangka kerja ujian ThinkPHP?Apakah ciri-ciri utama rangka kerja ujian ThinkPHP?Mar 18, 2025 pm 05:01 PM

Artikel ini membincangkan rangka kerja ujian ThinkPHP, yang menonjolkan ciri-ciri utamanya seperti ujian unit dan integrasi, dan bagaimana ia meningkatkan kebolehpercayaan aplikasi melalui pengesanan bug awal dan kualiti kod yang lebih baik.

Bagaimana cara menggunakan ThinkPhp untuk membina suapan data pasaran saham masa nyata?Bagaimana cara menggunakan ThinkPhp untuk membina suapan data pasaran saham masa nyata?Mar 18, 2025 pm 04:57 PM

Artikel membincangkan menggunakan ThinkPHP untuk suapan data pasaran saham masa nyata, memberi tumpuan kepada persediaan, ketepatan data, pengoptimuman, dan langkah-langkah keselamatan.

Apakah pertimbangan utama untuk menggunakan ThinkPhp dalam seni bina tanpa pelayan?Apakah pertimbangan utama untuk menggunakan ThinkPhp dalam seni bina tanpa pelayan?Mar 18, 2025 pm 04:54 PM

Artikel ini membincangkan pertimbangan utama untuk menggunakan ThinkPhp dalam arkitek tanpa pelayan, memberi tumpuan kepada pengoptimuman prestasi, reka bentuk tanpa statik, dan keselamatan. Ia menyoroti faedah seperti kecekapan kos dan skalabiliti, tetapi juga menangani cabaran

Bagaimana untuk melaksanakan penemuan perkhidmatan dan mengimbangi beban dalam microservices ThinkPHP?Bagaimana untuk melaksanakan penemuan perkhidmatan dan mengimbangi beban dalam microservices ThinkPHP?Mar 18, 2025 pm 04:51 PM

Artikel ini membincangkan pelaksanaan penemuan perkhidmatan dan mengimbangi beban dalam microservices ThinkPHP, memberi tumpuan kepada persediaan, amalan terbaik, kaedah integrasi, dan alat yang disyorkan. [159 aksara]

Apakah ciri -ciri canggih bekas suntikan ketergantungan ThinkPhp?Apakah ciri -ciri canggih bekas suntikan ketergantungan ThinkPhp?Mar 18, 2025 pm 04:50 PM

ThinkPhp's Container IOC menawarkan ciri -ciri canggih seperti pemuatan malas, mengikat kontekstual, dan suntikan kaedah untuk pengurusan ketergantungan yang cekap di php apps.Character Count: 159

Bagaimana cara menggunakan ThinkPhp untuk membina alat kerjasama masa nyata?Bagaimana cara menggunakan ThinkPhp untuk membina alat kerjasama masa nyata?Mar 18, 2025 pm 04:49 PM

Artikel ini membincangkan menggunakan ThinkPHP untuk membina alat kerjasama masa nyata, memberi tumpuan kepada persediaan, integrasi WebSocket, dan amalan terbaik keselamatan.

Apakah faedah utama menggunakan ThinkPhp untuk membina aplikasi SaaS?Apakah faedah utama menggunakan ThinkPhp untuk membina aplikasi SaaS?Mar 18, 2025 pm 04:46 PM

ThinkPHP memberi manfaat kepada aplikasi SaaS dengan reka bentuk ringan, seni bina MVC, dan extensibility. Ia meningkatkan skalabiliti, mempercepatkan pembangunan, dan meningkatkan keselamatan melalui pelbagai ciri.

Bagaimana untuk membina sistem giliran tugas yang diedarkan dengan ThinkPhp dan RabbitMQ?Bagaimana untuk membina sistem giliran tugas yang diedarkan dengan ThinkPhp dan RabbitMQ?Mar 18, 2025 pm 04:45 PM

Artikel ini menggariskan membina sistem giliran tugas yang diedarkan menggunakan ThinkPhp dan RabbitMQ, yang memberi tumpuan kepada pemasangan, konfigurasi, pengurusan tugas, dan skalabilitas. Isu -isu utama termasuk memastikan ketersediaan yang tinggi, mengelakkan perangkap biasa seperti implope

See all articles

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.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
Akan R.E.P.O. Ada Crossplay?
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

SecLists

SecLists

SecLists ialah rakan penguji keselamatan muktamad. Ia ialah koleksi pelbagai jenis senarai yang kerap digunakan semasa penilaian keselamatan, semuanya di satu tempat. SecLists membantu menjadikan ujian keselamatan lebih cekap dan produktif dengan menyediakan semua senarai yang mungkin diperlukan oleh penguji keselamatan dengan mudah. Jenis senarai termasuk nama pengguna, kata laluan, URL, muatan kabur, corak data sensitif, cangkerang web dan banyak lagi. Penguji hanya boleh menarik repositori ini ke mesin ujian baharu dan dia akan mempunyai akses kepada setiap jenis senarai yang dia perlukan.

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

Muat turun versi mac editor Atom

Muat turun versi mac editor Atom

Editor sumber terbuka yang paling popular

MinGW - GNU Minimalis untuk Windows

MinGW - GNU Minimalis untuk Windows

Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.