Dapatkan semua Anak, Cucu, dll. Nod Di Bawah Ibu Bapa Menggunakan PHP dengan Keputusan Pertanyaan MySQL
Isu Asal:
Mengambil semula semua anak, cucu dan nod keturunan seterusnya yang dikaitkan dengan nod induk ialah tugas biasa apabila bekerja dengan struktur data hierarki. Masalah ini timbul dalam senario di mana jadual pangkalan data menggunakan model senarai bersebelahan untuk organisasi data.
Pendekatan Menggunakan Rekursi:
Untuk menangani isu ini, rekursi terbukti berkesan pendekatan. Berikut ialah penjelasan terperinci tentang cara rekursi boleh digunakan untuk mencapai matlamat ini:
1. Mewujudkan Fungsi Asas:
Fungsi rekursif ialah fungsi yang meminta dirinya untuk menyelesaikan masalah dan sering digunakan dalam senario yang melibatkan struktur data hierarki atau bersarang. Dalam keadaan ini, fungsi asas kami akan dinamakan fetch_recursive.
2. Mengenalpasti Kriteria untuk Panggilan Rekursif:
Dalam fetch_recursive, dua syarat utama menentukan apabila panggilan rekursif dibuat:
3. Membina Susunan Hasil:
Setiap kali panggilan rekursif dibuat, fungsi akan mengisi tatasusunan hasil dengan data yang berkaitan daripada nod semasa. Tatasusunan ini akan berkembang secara berulang apabila panggilan rekursif melintasi struktur pokok.
4. Mencari Nod Kanak-Kanak Secara Rekursif:
Jika nod semasa mempunyai sebarang nod anak (yang dikenal pasti oleh kewujudan sifat kanak-kanak), panggilan rekursif lain akan dibuat untuk mendapatkan semula nod anak tersebut. Proses ini berterusan sehingga semua nod anak nod induk ditangkap.
Fungsi Tambahan:
1. Mengendalikan Cucu dan Keturunan:
Sifat rekursif fetch_recursive memastikan ia akan secara automatik melintasi hierarki dan mendapatkan bukan sahaja nod anak tetapi juga cucu dan keturunan seterusnya.
2 . Keputusan Penyatuan:
Selepas semua panggilan rekursif selesai, fungsi mengembalikan tatasusunan tunggal yang komprehensif yang mengandungi semua nod keturunan di bawah nod induk yang ditentukan.
Kod Pelaksanaan:
function fetch_recursive($src_arr, $currentid, $parentfound = false, $cats = array()) { foreach($src_arr as $row) { if((!$parentfound && $row['id'] == $currentid) || $row['parent_id'] == $currentid) { $rowdata = array(); foreach($row as $k => $v) $rowdata[$k] = $v; $cats[] = $rowdata; if($row['parent_id'] == $currentid) $cats = array_merge($cats, fetch_recursive($src_arr, $row['id'], true)); } } return $cats; }
Penggunaan:
Untuk menggunakan fungsi fetch_recursive, hanya hantar tatasusunan data asal (dalam kes ini, $data) dan ID nod yang anda ingin dapatkan semula keturunan. Contohnya, untuk mendapatkan semua nod anak, cucu dan keturunan di bawah nod 3:
function fetch_recursive($src_arr, $currentid, $parentfound = false, $cats = array()) { foreach($src_arr as $row) { if((!$parentfound && $row['id'] == $currentid) || $row['parent_id'] == $currentid) { $rowdata = array(); foreach($row as $k => $v) $rowdata[$k] = $v; $cats[] = $rowdata; if($row['parent_id'] == $currentid) $cats = array_merge($cats, fetch_recursive($src_arr, $row['id'], true)); } } return $cats; }
Ini akan mengisi pembolehubah $list dengan tatasusunan yang mengandungi semua nod yang berkaitan.
Atas ialah kandungan terperinci Bagaimanakah cara saya mendapatkan semua nod anak, cucu dan keturunan di bawah nod induk menggunakan PHP dengan hasil pertanyaan MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!