Rumah >pembangunan bahagian belakang >masalah PHP >Bagaimana untuk meletakkan tatasusunan klasifikasi tak terhingga php

Bagaimana untuk meletakkan tatasusunan klasifikasi tak terhingga php

王林
王林asal
2023-05-07 18:10:07482semak imbas

Dalam pembangunan web, pelbagai sistem klasifikasi digunakan secara meluas, dan pengelasan Infinitus ialah salah satu kaedah pengelasan biasa. Pengelasan infinitus merujuk kepada kaedah pengelasan yang tidak mengehadkan bilangan tahap pengelasan dalam sistem pengelasan, jadi struktur tatasusunannya memerlukan pemprosesan khas.

bahasa php sering digunakan dalam pembangunan web Mari kita bincangkan kaedah penempatan tatasusunan klasifikasi tak terhingga php.

  1. Kaedah rekursif

Kaedah rekursif ialah kaedah yang paling biasa digunakan dalam tatasusunan kategori PHP Infinitus Ia bergantung pada panggilan rekursif fungsi untuk membina data kategori.

Kaedah rekursif ditulis seperti berikut:

/**
 * 无限极分类
 * @param array $data         分类数据
 * @param int $pid            父ID
 * @param int $level          层级数
 * @return array              分类数组
 */
function getTree($data, $pid = 0, $level = 0) {
    $tree = [];
    foreach ($data as $val) {
        if ($val['parent_id'] == $pid) {
            $val['level'] = $level;
            $val['children'] = getTree($data, $val['id'], $level + 1);
            $tree[] = $val;
        }
    }
    return $tree;
}

Dalam kod di atas, fungsi getTree menerima tiga parameter, iaitu data klasifikasi $data, ID induk $pid dan nombor tahap $ tahap. Fungsi ini mula-mula mencipta tatasusunan $tree, kemudian melelang melalui data pengelasan, dan jika ID induk bagi item pengelasan semasa adalah sama dengan $pid, ia ditambahkan pada tatasusunan $tree. Setiap item klasifikasi akan menambah atribut tahap, menunjukkan nombor tahap semasa. Pada masa yang sama, fungsi getTree akan memanggil dirinya secara rekursif, menghantar tatasusunan subkategori sebagai parameter, supaya item subkategori juga boleh diproses dengan cara yang sama.

  1. Kaedah gelung

Kaedah gelung ialah kaedah pemprosesan lain dalam tatasusunan kategori PHP Infinitus Ia terutamanya merealisasikan pembinaan data kategori melalui sarang gelung.

Kaedah gelung ditulis seperti berikut:

/**
 * 无限极分类
 * @param array $data         分类数据
 * @return array              分类数组
 */
function getTree($data) {
    $tree = [];
    $node = [];
    foreach ($data as $val) {
        $node[$val['id']] = $val;
    }
    foreach ($node as $key => &$val) {
        if (isset($node[$val['parent_id']])) {
            $node[$val['parent_id']]['children'][] = &$val;
        } else {
            $tree[] = &$val;
        }
    }
    return $tree;
}

Dalam kod di atas, fungsi getTree menerima parameter $data, yang mewakili data terperingkat. Fungsi pertama mencipta tatasusunan $tree dan tatasusunan $node dan meletakkan data $data ke dalam tatasusunan $node. Kemudian, gelung foreach merentasi tatasusunan $nod Jika ID induk bagi item kategori semasa berada dalam tatasusunan $nod, item kategori semasa ditambah kepada subbarray kanak-kanak bagi item kategori induk.

Memandangkan elemen dalam tatasusunan $node disimpan mengikut ID kategori, jika item kategori yang akan diproses belum dilalui, ini bermakna item kategori adalah kategori peringkat atas, jadi kategori item boleh ditambah terus $ tatasusunan pokok. Fungsi akhirnya mengembalikan tatasusunan $tree, yang merupakan tatasusunan kategori tak terhingga.

Kesimpulan

Di atas ialah dua kaedah memproses tatasusunan klasifikasi tak terhingga PHP Kaedah rekursif lebih ringkas dan kaedah gelung lebih fleksibel. Memandangkan kaedah rekursif menggunakan panggilan fungsi rekursif, masalah seperti limpahan tindanan panggilan akan berlaku apabila menghadapi jumlah data yang sangat panjang atau besar, manakala kaedah gelung boleh mengendalikan jumlah data yang besar dengan lebih baik. Semasa penggunaan, anda boleh memilih kaedah yang sesuai dengan anda mengikut keperluan pembangunan sebenar anda.

Atas ialah kandungan terperinci Bagaimana untuk meletakkan tatasusunan klasifikasi tak terhingga php. 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