Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menukar data kategori tak terhingga ke dalam bentuk tatasusunan dalam php

Bagaimana untuk menukar data kategori tak terhingga ke dalam bentuk tatasusunan dalam php

PHPz
PHPzasal
2023-04-18 15:20:21501semak imbas

Dalam proses pembangunan dengan PHP, pengelasan tanpa had adalah keperluan biasa dan penting. Untuk kemudahan penggunaan dan operasi, kami biasanya menukar kategori tak terhingga kepada bentuk tatasusunan. Berikut ialah cara untuk menukar data kategori tak terhingga kepada bentuk tatasusunan.

  1. Tentukan format data kategori tak terhingga

Sebelum kita mula, kita perlu menetapkan format data kategori tak terhingga. Secara umumnya, format data pengelasan tak terhingga asas terdiri daripada medan berikut:

  • id: pengecam unik, biasanya ID peningkatan automatik.
  • nama: Nama kategori.
  • pid: ID pengelasan peringkat atas, 0 jika ia ialah pengelasan peringkat pertama.
  • tahap: tahap klasifikasi, 1 jika ia adalah klasifikasi tahap pertama.

Sebagai contoh, data kategori tak terhingga ringkas adalah seperti berikut:

[
    ['id' => 1, 'name' => '电子产品', 'pid' => 0, 'level' => 1],
    ['id' => 2, 'name' => '手机', 'pid' => 1, 'level' => 2],
    ['id' => 3, 'name' => '电脑', 'pid' => 1, 'level' => 2],
    ['id' => 4, 'name' => '智能手机', 'pid' => 2, 'level' => 3],
    ['id' => 5, 'name' => '笔记本电脑', 'pid' => 3, 'level' => 3],
]
  1. Tentukan fungsi transformasi

Kita boleh mentakrifkan fungsi rekursif, Tukar data kategori tanpa had ke dalam bentuk tatasusunan. Kod fungsi ini adalah seperti berikut:

function categoryToTree($source, $parentId = 0) {   
    $result = [];
   
    foreach ($source as $key => $value) {
        if ($value['pid'] == $parentId) {       
            unset($source[$key]);          
            $children = categoryToTree($source, $value['id']);     
            if (!empty($children)) {
                $value['children'] = $children;
            }
            $result[] = $value;         
        }
    }
   
    return $result;
}

Kami menggunakan rekursi untuk mencapai penukaran pengelasan tak terhingga. Khususnya, untuk setiap data kategori, kami mula-mula menentukan sama ada ia adalah subkategori kategori semasa Jika ya, tambahkannya pada tatasusunan hasil dan proses subkategorinya secara rekursif, langkau kategori dan proses yang seterusnya secara langsung.

Perhatikan bahawa apabila memproses subkategori secara rekursif, kami akan menghantar dalam tatasusunan $source. Untuk memastikan setiap kategori hanya diproses sekali, kami perlu memadamkan data kategori yang diproses daripada tatasusunan $source.

  1. Lakukan transformasi

Menggunakan fungsi transformasi yang ditakrifkan di atas, kita boleh menukar data kategori tak terhingga kepada bentuk tatasusunan. Sebagai contoh, kami melaksanakan kod berikut:

$data = [
    ['id' => 1, 'name' => '电子产品', 'pid' => 0, 'level' => 1],
    ['id' => 2, 'name' => '手机', 'pid' => 1, 'level' => 2],
    ['id' => 3, 'name' => '电脑', 'pid' => 1, 'level' => 2],
    ['id' => 4, 'name' => '智能手机', 'pid' => 2, 'level' => 3],
    ['id' => 5, 'name' => '笔记本电脑', 'pid' => 3, 'level' => 3],
];

$result = categoryToTree($data);

print_r($result);

Hasil output adalah seperti berikut:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => 电子产品
            [pid] => 0
            [level] => 1
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 2
                            [name] => 手机
                            [pid] => 1
                            [level] => 2
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 4
                                            [name] => 智能手机
                                            [pid] => 2
                                            [level] => 3
                                        )
   
                                )
   
                        )
   
                    [1] => Array
                        (
                            [id] => 3
                            [name] => 电脑
                            [pid] => 1
                            [level] => 2
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 5
                                            [name] => 笔记本电脑
                                            [pid] => 3
                                            [level] => 3
                                        )
   
                                )
   
                        )
   
                )
   
        )
   
)

Seperti yang anda lihat, kami telah menukar data kategori tak terhingga ke dalam bentuk tatasusunan, dan setiap kategori mengandungi subkategorinya. Dengan cara ini, kita boleh menggunakan fungsi tatasusunan dengan mudah untuk memproses data kategori tanpa had.

Atas ialah kandungan terperinci Bagaimana untuk menukar data kategori tak terhingga ke dalam bentuk tatasusunan dalam 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