Dalam bidang pembangunan web, pertanyaan klasifikasi adalah keperluan yang sangat biasa Sama ada platform e-dagang atau sistem pengurusan kandungan, terdapat kaedah paparan data berdasarkan klasifikasi. Apabila bilangan lapisan klasifikasi meningkat, tugas menanya sub-kategori menjadi lebih dan lebih kompleks. Artikel ini akan memperkenalkan kaedah pertanyaan gelung PHP yang cekap untuk subkategori untuk membantu pembangun mengurus hierarki kategori dengan mudah.
Pertama, kita perlu mendapatkan data terperingkat Di sini kita mengambil jadual pangkalan data ringkas sebagai contoh. Andaikan jadual ini dinamakan kategori dan mempunyai medan berikut:
id | name | parent_id |
---|---|---|
1 | 家用电器 | 0 |
2 | 手机数码 | 0 |
3 | 电视 | 1 |
4 | 冰箱 | 1 |
5 | 手机 | 2 |
6 | 笔记本电脑 | 2 |
di mana id ialah pengecam unik kategori, nama ialah nama kategori dan parent_id ialah id kategori induk kepada yang mana kategorinya. Jika kategori tidak mempunyai kategori induk, parent_id ialah 0.
Seterusnya, kita boleh mencipta fungsi pertanyaan yang akan menerima id kategori induk sebagai parameter, Dan mengembalikan semua subkategori di bawah kategori induk.
function get_children_categories($parent_id) { // <code to query categories from database by parent_id> return $categories; }
Dalam kod di atas, kami akan menanyakan semua subkategori daripada pangkalan data dan mengembalikannya untuk kegunaan selanjutnya.
Untuk situasi dengan pelbagai peringkat subkategori, kami memerlukan kaedah pertanyaan rekursif. Iaitu, kita perlu membuat pertanyaan secara rekursif ke bawah bermula dari nod akar sehingga kita menemui subkategori yang diperlukan.
Pelaksanaan kod khusus adalah seperti berikut:
function get_children_categories($parent_id) { $categories = array(); // <code to query categories from database by parent_id> foreach($results as $result) { $category = array(); $category['id'] = $result['id']; $category['name'] = $result['name']; $children = get_children_categories($result['id']); if (!empty($children)) { $category['children'] = $children; } $categories[] = $category; } return $categories; }
Kod di atas secara rekursif menanyakan subkategori bagi setiap lapisan kategori demi lapisan dan menambahkannya pada set hasil, dengan itu membina satu hierarki klasifikasi. Dalam proses ini, kami akan menggunakan gelung foreach PHP dan secara rekursif memanggil kaedah kami sendiri.
Sekarang kita telah berjaya memperoleh hierarki kategori yang lengkap, kita boleh mengulanginya menggunakan gelung foreach.
function print_categories($categories) { echo "<ul>"; foreach($categories as $category) { echo "<li>" . $category['name'] . "</li>"; if (!empty($category['children'])) { print_categories($category['children']); } } echo "</ul>"; }
Di sini, kami akan merentasi setiap kategori dan mengeluarkan nama mereka. Jika kategori mengandungi subkategori, panggil kaedah anda sendiri secara rekursif dan cetak semua subkategori.
Semasa pelaksanaan kod di atas, kami mengambil kira prestasi kod tersebut. Terutamanya untuk hierarki klasifikasi dengan sejumlah besar subkategori, anda mungkin menghadapi kesesakan prestasi apabila membuat pertanyaan secara rekursif. Untuk menyelesaikan masalah ini, kita boleh menggunakan mekanisme caching untuk cache keputusan dalam memori untuk meningkatkan kelajuan pertanyaan. Di sini, kita boleh menggunakan sambungan memcached PHP untuk mencache set keputusan dalam memori, dan mendapatkan keputusan terus daripada cache dalam pertanyaan berikutnya.
$memcached = new Memcached(); $memcached->addServer('localhost', 11211); $categories = $memcached->get('categories:1'); if (!$categories) { $categories = get_children_categories(1); $memcached->set('categories:1', $categories); } print_categories($categories);
Dalam kod di atas, kami mula-mula mewujudkan sambungan klien memcached dan meng-cache hasil pengelasan ke dalam kunci cache bernama "categories:1". Dalam pertanyaan seterusnya, kita boleh mendapatkan keputusan terus daripada cache tanpa melaksanakan semula fungsi pertanyaan. Pendekatan ini boleh meningkatkan prestasi pertanyaan dengan ketara, terutamanya untuk data kategori berskala besar.
Artikel ini memperkenalkan kaedah yang cekap untuk menanya subkategori dalam gelung PHP. Dengan menanya subkategori secara rekursif lapisan demi lapisan dan menggunakan mekanisme caching, kami boleh mengurus hierarki klasifikasi dengan mudah, meningkatkan kecekapan pertanyaan dan menyediakan kaedah pertanyaan klasifikasi yang lebih mudah untuk pembangunan Web.
Atas ialah kandungan terperinci [Perkongsian ringkasan] Kaedah subkategori pertanyaan gelung PHP yang cekap. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!