Artikel ini akan membimbing anda melalui kaedah untuk mendapatkan semua nod anak dan keturunan untuk ibu bapa tertentu menggunakan PHP dengan hasil pertanyaan MySQL. Teknik ini menghapuskan keperluan untuk membina tatasusunan berbilang dimensi struktur pokok dan membolehkan anda mendapatkan semua nod secara langsung.
Pertimbangkan jadual MySQL yang disusun sebagai senarai bersebelahan, di mana data hierarki diwakili dengan lajur untuk id, nama , dan parent_id. Pertanyaan SQL berikut boleh mendapatkan semula semua baris daripada jadual ini ke dalam tatasusunan bersekutu:
$r = mysql_query("SELECT * FROM test "); $data = array(); while($row = mysql_fetch_assoc($r)) { $data[] = $row; }
Mari andaikan kita mahu menapis tatasusunan ini untuk nod di bawah induk dengan id 3, termasuk induk itu sendiri. Fungsi fetch_recursive tersuai ini boleh mencapai perkara ini:
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; }
Untuk menggunakan fungsi ini, hantar tatasusunan $data yang diperolehi daripada pertanyaan sebagai hujah pertama dan id induk yang anda mahu dapatkan semula nod anak sebagai hujah kedua:
$list = fetch_recursive($data, 3);
$list kini akan mengandungi tatasusunan bersekutu dengan semua nod anak dan nod induk (id 3) disertakan.
Penyelesaian ini mendapatkan semula semua nod anak dan keturunan untuk induk tertentu tanpa memerlukan pembinaan struktur pokok berbilang dimensi.
Atas ialah kandungan terperinci Bagaimana Mendapatkan Semua Nod Anak dan Keturunan untuk Ibu Bapa dalam MySQL Menggunakan PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!