Rumah  >  Artikel  >  pembangunan bahagian belakang  >  [Perkongsian ringkasan] Kaedah subkategori pertanyaan gelung PHP yang cekap

[Perkongsian ringkasan] Kaedah subkategori pertanyaan gelung PHP yang cekap

PHPz
PHPzasal
2023-03-21 15:49:491429semak imbas

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.

  1. Dapatkan data terperingkat

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.

  1. Buat fungsi pertanyaan

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.

  1. Membina kaedah pertanyaan rekursif

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.

  1. Mengulang subkategori

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.

  1. Pertimbangan Prestasi

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.

  1. Ringkasan

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn