Rumah > pembangunan bahagian belakang > masalah PHP > Mari kita bincangkan tentang cara menukar tatasusunan dua dimensi kepada struktur pokok dalam PHP

Mari kita bincangkan tentang cara menukar tatasusunan dua dimensi kepada struktur pokok dalam PHP

PHPz
Lepaskan: 2023-04-12 14:39:39
asal
981 orang telah melayarinya

Dengan pembangunan berterusan aplikasi rangkaian, semakin banyak tapak web dan aplikasi dibangunkan menggunakan pemisahan bahagian hadapan dan belakang. Ini memisahkan kod bahagian hadapan daripada kod bahagian belakang dan memerlukan komunikasi melalui interaksi data. Dalam proses interaksi data, tatasusunan sering digunakan, terutamanya tatasusunan dua dimensi. Jadi bagaimana untuk menukar tatasusunan dua dimensi ke dalam struktur pokok? Artikel ini akan berkongsi cara menukar tatasusunan dua dimensi kepada pokok dalam PHP.

1. Apakah itu struktur pokok

Sebelum memperkenalkan cara menukar tatasusunan dua dimensi kepada bentuk pokok, mari kita fahami dahulu apa itu struktur pokok. Dalam sains komputer, struktur pepohon ialah struktur data tak linear, yang merupakan satu set perhubungan hierarki yang terdiri daripada n (n>0) nod terhad. Salah satu nod dipanggil nod akar, dan nod yang tinggal boleh dilihat sebagai satu atau lebih subpokok struktur pokok.

Mari kita lihat contoh mudah Sebagai contoh, struktur organisasi syarikat boleh dipaparkan sebagai struktur pokok Peringkat teratas ialah pengurus besar (nod akar), dan terdapat beberapa pengurus jabatan (sub-nod ) di bawah Setiap Terdapat beberapa pekerja (nod daun) di bawah pengurus jabatan.

2. Prinsip menukar tatasusunan dua dimensi kepada struktur pokok

Menukar tatasusunan dua dimensi kepada struktur pokok boleh dianggap sebagai satu set data rata, menggunakan dalamannya perhubungan untuk menukar Proses menyusunnya menjadi struktur data pokok. Proses penukaran boleh dilaksanakan secara rekursif. Langkah-langkah khusus adalah seperti berikut:

  1. Cari data nod akar daripada tatasusunan dua dimensi, keluarkannya daripada tatasusunan, dan kemudian cari nod anak secara rekursif. di bawah nod akar.
  2. Lintasi keseluruhan tatasusunan, tolak nod anak dalam setiap elemen ke dalam tindanan, dan kemudian cari nod anak di bawah nod anak secara rekursif.
  3. Keadaan akhir rekursif ialah tatasusunan semasa kosong atau tiada nod anak nod semasa.

Mengikut tiga langkah di atas, fungsi menukar tatasusunan dua dimensi kepada pokok boleh direalisasikan.

3. Pelaksanaan Kod

Di bawah ini kami menggunakan contoh praktikal untuk menunjukkan cara menukar tatasusunan dua dimensi kepada struktur pokok. Katakan kita mempunyai tatasusunan dua dimensi berikut:

$data = array(
    array('id'=>1,'name'=>'节点1','pid'=>0),
    array('id'=>2,'name'=>'节点2','pid'=>1),
    array('id'=>3,'name'=>'节点3','pid'=>2),
    array('id'=>4,'name'=>'节点4','pid'=>2),
    array('id'=>5,'name'=>'节点5','pid'=>0)
);
Salin selepas log masuk

Tatasusunan ini mengandungi 5 nod, dengan id mewakili pengecam unik nod, nama mewakili nama nod dan pid mewakili id ​​nod induk nod.

Kini kita perlu menukar tatasusunan dua dimensi ini kepada struktur pokok berikut:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => 节点1
            [children] => Array
                (
                    [0] => Array
                        (
                            [id] => 2
                            [name] => 节点2
                            [children] => Array
                                (
                                    [0] => Array
                                        (
                                            [id] => 3
                                            [name] => 节点3
                                            [children] => Array()
                                        )

                                    [1] => Array
                                        (
                                            [id] => 4
                                            [name] => 节点4
                                            [children] => Array()
                                        )

                                )

                        )

                )

        )

    [1] => Array
        (
            [id] => 5
            [name] => 节点5
            [children] => Array()
        )

)
Salin selepas log masuk

Proses pelaksanaan khusus adalah seperti berikut:

function buildTree(&$data,$pid = 0){
    $tree = array();
    foreach($data as $k=>$v){
        if($v['pid'] == $pid){
            $temp = $v;
            $temp['children'] = buildTree($data,$v['id']);
            $tree[] = $temp;
            unset($data[$k]);
        }
    }
    return $tree;
}

$data =    array(
    array('id'=>1,'name'=>'节点1','pid'=>0),
    array('id'=>2,'name'=>'节点2','pid'=>1),
    array('id'=>3,'name'=>'节点3','pid'=>2),
    array('id'=>4,'name'=>'节点4','pid'=>2),
    array('id'=>5,'name'=>'节点5','pid'=>0)
);
print_r(buildTree($data));
Salin selepas log masuk

Dalam kod di atas, buildTree Fungsi mula-mula membuat tatasusunan kosong $tree, kemudian melintasi keseluruhan tatasusunan $data, menyimpan semua data dengan pid $pid ke dalam tatasusunan $tree, dan secara rekursif mencari semua nod anak di bawah $pid, dan kemudian mengembalikan $tree array. Jika tatasusunan $data kosong atau tiada nod anak nod semasa, rekursi tamat.

4. Ringkasan

Melalui kod di atas, kita dapat melihat bahawa proses menukar tatasusunan dua dimensi kepada struktur pokok adalah sangat mudah nod mengikut urutan. Hanya menyusunnya ke dalam struktur pokok. Ini sangat berguna untuk pemprosesan dan paparan data dalam pembangunan web, dan boleh merealisasikan fungsi paparan data dan organisasi struktur data yang berbeza dalam senario yang berbeza.

Atas ialah kandungan terperinci Mari kita bincangkan tentang cara menukar tatasusunan dua dimensi kepada struktur pokok 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