Rumah pembangunan bahagian belakang tutorial php 关于xuzuning版主发的非递归树形数组构造函数有关问题

关于xuzuning版主发的非递归树形数组构造函数有关问题

Jun 13, 2016 pm 01:31 PM
child id pid quot

关于xuzuning版主发的非递归树形数组构造函数问题
之前自己使用过循环或者递归构建树型数组。今天搜索的时候看到之前xuzuning版主发的非递归树型数组构建函数。


PHP code
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->
/**
 * 创建子节点树形数组
 * 参数
 * $ar 数组,邻接列表方式组织的数据
 * $id 数组中作为主键的下标或关联键名
 * $pid 数组中作为父键的下标或关联键名
 * 返回 多维数组
 **/
function find_child($ar, $id='id', $pid='pid') {
  foreach($ar as $v) $t[$v[$id]] = $v;
  foreach ($t as $k => $item){
    if( $item[$pid] ) {
      $t[$item[$pid]]['child'][$item[$id]] =& $t[$k];
    }
  }
  return $t;
}

Salin selepas log masuk


觉得写的非常巧妙,效率很高,也非常安全,受益匪浅。但是,在实际使用中,碰见了一点小问题。
因为本函数的中心思想是通过$tree[$pid]这样的结构来存放,也就是说,每条记录的key为其$pid。

这样就出现了一个问题,我在使用json_encode()的时候,会变成
{"pid1":{"id":"0001","pid":"0000","children":[{"pid2":{"id":"0002","pid":"0001"}},{"pid3":{"id":"0003","pid":"0001"}}]}}这样
可是我需要的结构是
{"id":"0001","pid":"0000","children":[{"id":"0002","pid":"0001"},{"id":"0002","pid":"0001"}]}
也就是说,存放记录的key为array默认的。

请问这个函数应该怎么修改呢?

------解决方案--------------------
不大可能,除非你寻找出新的算法
这个算法就是利用了 pid 和 id 的关系,通过构造关联数组才得以实现的

如果要使用这个函数,就要接受这个结果。除去 child 键倒是可以的

如果你遍历结果,将所有 child 下的关联数组用 array_values 化为下标数组,亦是一种方法
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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

ID Apple ini belum lagi digunakan dalam iTunes Store: Betulkan ID Apple ini belum lagi digunakan dalam iTunes Store: Betulkan Jun 10, 2024 pm 05:42 PM

Apabila log masuk ke iTunesStore menggunakan AppleID, ralat ini mengatakan "AppleID ini belum digunakan dalam iTunesStore" mungkin dilemparkan pada skrin. Tiada mesej ralat yang perlu dibimbangkan, anda boleh membetulkannya dengan mengikuti set penyelesaian ini. Betulkan 1 – Tukar Alamat Penghantaran Sebab utama gesaan ini muncul di iTunes Store ialah anda tidak mempunyai alamat yang betul dalam profil AppleID anda. Langkah 1 – Pertama, buka Tetapan iPhone pada iPhone anda. Langkah 2 – AppleID harus berada di atas semua tetapan lain. Jadi, bukalah. Langkah 3 – Setelah sampai, buka pilihan “Pembayaran & Penghantaran”. Langkah 4 – Sahkan akses anda menggunakan Face ID. langkah

Betulkan ralat cakera ID acara 55, 50, 98, 140 dalam pemapar acara Betulkan ralat cakera ID acara 55, 50, 98, 140 dalam pemapar acara Mar 19, 2024 am 09:43 AM

Jika anda menemui ID acara 55, 50, 140 atau 98 dalam Pemapar Acara Windows 11/10, atau menghadapi ralat bahawa struktur sistem fail cakera rosak dan tidak boleh digunakan, sila ikut panduan di bawah untuk menyelesaikan isu tersebut. Apakah maksud Peristiwa 55, struktur sistem fail pada cakera rosak dan tidak boleh digunakan? Pada sesi 55, struktur sistem fail pada cakera Ntfs rosak dan tidak boleh digunakan. Sila jalankan utiliti chkMSK pada volum Apabila NTFS tidak dapat menulis data ke log transaksi, ralat dengan ID Peristiwa 55 akan dicetuskan, yang akan menyebabkan NTFS gagal menyelesaikan operasi tidak dapat menulis data transaksi. Ralat ini biasanya berlaku apabila sistem fail rosak, mungkin disebabkan oleh kehadiran sektor buruk pada cakera atau ketidakcukupan sistem fail subsistem cakera.

Di manakah saya boleh mencari ID Alibaba? Di manakah saya boleh mencari ID Alibaba? Mar 08, 2024 pm 09:49 PM

Dalam perisian Alibaba, sebaik sahaja anda berjaya mendaftarkan akaun, sistem akan memberikan anda ID unik, yang akan berfungsi sebagai identiti anda pada platform. Tetapi bagi kebanyakan pengguna, mereka ingin menanyakan ID mereka, tetapi tidak tahu cara melakukannya. Kemudian editor laman web ini akan membawakan anda pengenalan terperinci kepada langkah-langkah strategi di bawah, saya harap ia dapat membantu anda! Di mana untuk mencari jawapan kepada Alibaba ID: [Alibaba]-[My]. 1. Mula-mula buka perisian Alibaba Selepas memasuki laman utama, kita perlu klik [My] di sudut kanan bawah 2. Kemudian selepas datang ke halaman Saya, kita boleh melihat [id] di bahagian atas halaman; Adakah ID sama dengan Taobao Alibaba ID dan Taobao ID adalah berbeza, tetapi kedua-duanya

ID Peristiwa 4660: Objek dipadamkan [Betulkan] ID Peristiwa 4660: Objek dipadamkan [Betulkan] Jul 03, 2023 am 08:13 AM

Sesetengah pembaca kami menemui ID4660 acara. Mereka sering tidak pasti apa yang perlu dilakukan, jadi kami menerangkannya dalam panduan ini. ID Peristiwa 4660 biasanya dilog apabila objek dipadamkan, jadi kami juga akan meneroka beberapa cara praktikal untuk membetulkannya pada komputer anda. Apakah acara ID4660? ID Peristiwa 4660 berkaitan dengan objek dalam Direktori Aktif dan akan dicetuskan oleh mana-mana faktor berikut: Pemadaman Objek – Peristiwa keselamatan dengan ID Peristiwa 4660 direkodkan apabila objek dipadamkan daripada Direktori Aktif. Perubahan manual – ID Peristiwa 4660 mungkin dijana apabila pengguna atau pentadbir menukar kebenaran objek secara manual. Ini boleh berlaku apabila menukar tetapan kebenaran, mengubah suai tahap akses atau menambah atau mengalih keluar orang atau kumpulan

Tempat untuk menyemak ID Video Tencent Tempat untuk menyemak ID Video Tencent Feb 24, 2024 pm 06:25 PM

Di manakah saya boleh menyemak ID Video Tencent? Terdapat ID eksklusif dalam APP Video Tencent, tetapi kebanyakan pengguna tidak tahu cara menyemak ID Video Tencent Seterusnya ialah tutorial grafik tentang cara menyemak ID Video Tencent yang dibawa oleh editor untuk pengguna yang berminat. Datang dan lihat! Tutorial Penggunaan Video Tencent Di mana untuk menyemak ID Video Tencent 1. Mula-mula buka APP Video Tencent dan masukkan kawasan khas melalui [Pusat Peribadi] di sudut kanan bawah halaman utama 2. Kemudian masukkan halaman Pusat Peribadi dan pilih [; Fungsi Tetapan]; 3. Kemudian pergi ke halaman Tetapan, klik [Keluar Akaun] di bahagian bawah 4. Akhir sekali, anda boleh melihat nombor ID eksklusif pada halaman yang ditunjukkan di bawah;

Bagaimana untuk memaparkan pid dalam Pengurus Tugas Win7 Editor akan mengajar anda bagaimana untuk memaparkannya. Bagaimana untuk memaparkan pid dalam Pengurus Tugas Win7 Editor akan mengajar anda bagaimana untuk memaparkannya. Jan 11, 2024 pm 07:00 PM

Ramai rakan mungkin tidak biasa dengan pengecam pid, dan anda boleh menyemaknya dalam pengurus tugas. Walau bagaimanapun, sesetengah pengguna tidak dapat mencari pengecam PID apabila mereka membuka Pengurus Tugas Sebenarnya, jika pengguna ingin melihat pengecam PID proses, dia perlu menyediakan "Pengurus Tugas" untuk melihatnya ambil sistem win7 sebagai contoh Bagaimana untuk melihat pengecam PID proses. Pengecam PID ialah nombor jujukan unik yang diberikan secara automatik oleh sistem pengendalian Windows untuk menjalankan program Selepas proses ditamatkan, PID dikitar semula oleh sistem dan mungkin terus diberikan kepada program yang baru dijalankan Apabila pengguna perlu melihat proses tersebut , mereka akan menggunakan Pengurus tugas untuk menyemak, jadi bagaimana untuk menyemak pengecam PID proses? Izinkan saya berkongsi dengan anda di bawah

Apakah penyelesaian untuk ID yang diedarkan redis? Apakah penyelesaian untuk ID yang diedarkan redis? Jun 03, 2023 am 10:14 AM

Penyelesaian ID teragih yang biasa digunakan Dalam sistem teragih, adalah sangat penting untuk menjana ID unik secara global, kerana dalam sistem teragih, berbilang nod yang menjana ID pada masa yang sama boleh menyebabkan konflik ID. Yang berikut memperkenalkan beberapa penyelesaian ID teragih yang biasa digunakan. UUIDUUID (Universally Unique Identifier) ​​​​adalah pengecam yang terdiri daripada 128 digit, yang boleh menjamin keunikan global kerana algoritma penjanaannya adalah berdasarkan faktor seperti cap waktu, ID nod dan sebagainya. UUID boleh dijana menggunakan kelas UUID Java sendiri, seperti yang ditunjukkan di bawah: javaCopycodeimportjava.util.UUID;publicclassUuidGenerator{publicstat

Bagaimana untuk mencari ID proses induk (PPID) di Linux Bagaimana untuk mencari ID proses induk (PPID) di Linux Mar 09, 2024 am 08:01 AM

Dalam sistem pengendalian Linux, setiap program yang dijalankan adalah satu proses, dan setiap proses mempunyai pengecam proses yang unik (PID). Begitu juga, setiap proses akan mempunyai proses induk, iaitu proses yang menciptanya Pengecam proses induk dipanggil ID proses induk (PPID). Dalam artikel ini, kami akan meneroka cara mencari ID proses induk dalam sistem Linux dan memperkenalkan beberapa arahan dan alatan yang berkesan untuk membantu anda mendapatkan maklumat terperinci tentang hubungan antara proses. Arahan asas untuk mencari ID proses induk Pertama, saya akan memperkenalkan anda secara ringkas kepada beberapa arahan asas yang boleh digunakan untuk melihat semua proses yang berjalan dalam sistem dan ID proses induknya. Gunakan arahan ps untuk melihat maklumat proses Perintah ps ialah alat berkuasa yang digunakan untuk melaporkan

See all articles