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

PHPz
Lepaskan: 2023-04-18 15:48:24
asal
503 orang telah melayarinya

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],
]
Salin selepas log masuk
  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;
}
Salin selepas log masuk

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);
Salin selepas log masuk

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
                                        )
   
                                )
   
                        )
   
                )
   
        )
   
)
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan