Dalam kes di mana data disimpan dalam format senarai bersebelahan, fungsi rekursif boleh mendapatkan semula anak dan cucu dengan cekap nod untuk nod induk tertentu. Pendekatan ini menawarkan penyelesaian yang disesuaikan untuk mengenal pasti semua nod di bawah induk tertentu.
Berikut ialah pelaksanaan fungsi rekursif yang menyelesaikan tugas ini:
function fetch_recursive($tree, $parent_id, $parent_found = false, $list = array()) { foreach ($tree as $key => $node) { if ($parent_found || $key == $parent_id) { $row_data = array(); foreach ($node as $field => $value) { if ($field != 'children') { $row_data[$field] = $value; } } $list[] = $row_data; if (isset($node['children']) && !empty($node['children'])) { $list = array_merge($list, fetch_recursive($node['children'], $parent_id, true)); } } elseif (isset($node['children']) && !empty($node['children'])) { $list = array_merge($list, fetch_recursive($node['children'], $parent_id)); } } return $list; }
Dengan mengandaikan anda telah membina struktur pepohon daripada data menggunakan fungsi yang berasingan, anda boleh menggunakan fungsi rekursif ini untuk mendapatkan semua nod anak dan cucu untuk nod induk tertentu.
Sebagai contoh, jika anda mempunyai pepohon berstruktur seperti berikut:
Array ( [1] => Array ( [id] => 1 [name] => Electronics [parent_id] => 0 [children] => Array ( [2] => Array ( [id] => 2 [name] => Televisions [parent_id] => 1 [children] => Array ( [4] => Array ( [id] => 4 [name] => Tube [parent_id] => 2 [children] => Array() ) [5] => Array ( [id] => 5 [name] => LCD [parent_id] => 2 [children] => Array() ) [6] => Array ( [id] => 6 [name] => Plasma [parent_id] => 2 [children] => Array() ) ) ) [3] => Array ( [id] => 3 [name] => Portable Electronics [parent_id] => 1 [children] => Array ( [7] => Array ( [id] => 7 [name] => Mp3 Players [parent_id] => 3 [children] => Array ( [10] => Array ( [id] => 10 [name] => Flash [parent_id] => 7 [children] => Array() ) ) ) [8] => Array ( [id] => 8 [name] => CD Players [parent_id] => 3 [children] => Array() ) [9] => Array ( [id] => 9 [name] => 2 Way Radios [parent_id] => 3 [children] => Array() ) ) ) ) ) )
Untuk mendapatkan semula semua nod anak, katakan, nod dengan ID 3, anda akan memanggil fungsi seperti ini:
$parent_id = 3; $child_nodes = fetch_recursive($tree, $parent_id);
The Pembolehubah $child_nodes kini akan mengandungi tatasusunan dengan semua nod anak nod dengan ID 3, seperti:
Array ( [0] => Array ( [id] => 3 [name] => Portable Electronics [parent_id] => 1 ) [1] => Array ( [id] => 7 [name] => Mp3 Players [parent_id] => 3 ) [2] => Array ( [id] => 10 [name] => Flash [parent_id] => 7 ) [3] => Array ( [id] => 8 [name] => CD Players [parent_id] => 3 ) [4] => Array ( [id] => 9 [name] => 2 Way Radios [parent_id] => 3 ) )
Atas ialah kandungan terperinci Bagaimana untuk mendapatkan semula semua nod anak bersarang bagi ibu bapa tertentu dalam struktur pokok menggunakan fungsi PHP rekursif?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!