Hierarki Kategori dalam PHP dan MySQL
Dalam struktur pangkalan data biasa, kategori disusun mengikut hierarki, dengan kategori induk yang mengandungi kategori anak . Mendapatkan semula hierarki ini daripada pangkalan data MySQL boleh menjadi tugas yang mencabar. Artikel ini meneroka cara membina hierarki kategori dengan berkesan menggunakan PHP dan MySQL.
Model Senarai Bersebelahan
Model senarai bersebelahan mewakili data hierarki dengan menyimpan hubungan ibu bapa-anak dalam satu meja. Setiap baris dalam jadual mengandungi ID kategori dan ID induknya. Model ini membolehkan untuk mendapatkan semula pepohon kategori dengan cekap menggunakan satu pertanyaan SQL.
Menjana Hierarki
Untuk menjana hierarki kategori, kami menggunakan kod PHP berikut:
<code class="php">$refs = array(); $list = array(); $sql = "SELECT item_id, parent_id, name FROM items ORDER BY name"; $result = $pdo->query($sql); foreach ($result as $row) { $ref = &$refs[$row['item_id']]; $ref['parent_id'] = $row['parent_id']; $ref['name'] = $row['name']; if ($row['parent_id'] == 0) { $list[$row['item_id']] = &$ref; } else { $refs[$row['parent_id']]['children'][$row['item_id']] = &$ref; } }</code>
Kod ini berulang melalui set hasil, mencipta rujukan kepada setiap kategori dalam tatasusunan. Ia menggunakan perhubungan ibu bapa-anak untuk membina tatasusunan berbilang dimensi yang mewakili hierarki.
Mencipta Senarai Output
Untuk memaparkan hierarki, kami menggunakan fungsi rekursif:
<code class="php">function toUL(array $array) { $html = '<ul>' . PHP_EOL; foreach ($array as $value) { $html .= '<li>' . $value['name']; if (!empty($value['children'])) { $html .= toUL($value['children']); } $html .= '</li>' . PHP_EOL; } $html .= '</ul>' . PHP_EOL; return $html; }</code>
Fungsi ini mengambil tatasusunan berbilang dimensi dan menjana senarai tidak tertib HTML yang mewakili hierarki kategori. Ia merentasi hierarki secara rekursif, mencipta senarai bersarang mengikut keperluan.
Atas ialah kandungan terperinci Bagaimana untuk Membina Hierarki Kategori dalam PHP dan MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!