Rumah pembangunan bahagian belakang tutorial php [分享]PHP兑现树的递归展示

[分享]PHP兑现树的递归展示

Jun 13, 2016 pm 01:06 PM
Level name param string

[分享]PHP实现树的递归展示
原文博客地址: http://blog.csdn.net/lgg201/article/details/7973971

用法:

PHP code
<!--

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

-->
usage: 
php tree-display.php <tree deepth>

</tree>
Salin selepas log masuk


测试输出:
PHP code
<!--

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

-->
$ php tree-display.php 3
 name-00000001[1]
┇    ┠ name-00000002[2]
┇    ┇    ┠ name-00000003[3]
┇    ┇    ┠ name-00000004[4]
┇    ┇    ┗ name-00000005[5]
┇    ┠ name-00000006[6]
┇    ┇    ┠ name-00000007[7]
┇    ┇    ┠ name-00000008[8]
┇    ┇    ┗ name-00000009[9]
┇    ┗ name-00000010[10]
┇         ┠ name-00000011[11]
┇         ┠ name-00000012[12]
┇         ┗ name-00000013[13]
┠ name-00000014[14]
┇    ┠ name-00000015[15]
┇    ┇    ┠ name-00000016[16]
┇    ┇    ┠ name-00000017[17]
┇    ┇    ┗ name-00000018[18]
┇    ┠ name-00000019[19]
┇    ┇    ┠ name-00000020[20]
┇    ┇    ┠ name-00000021[21]
┇    ┇    ┗ name-00000022[22]
┇    ┗ name-00000023[23]
┇         ┠ name-00000024[24]
┇         ┠ name-00000025[25]
┇         ┗ name-00000026[26]
┗ name-00000027[27]
     ┠ name-00000028[28]
     ┇    ┠ name-00000029[29]
     ┇    ┠ name-00000030[30]
     ┇    ┗ name-00000031[31]
     ┠ name-00000032[32]
     ┇    ┠ name-00000033[33]
     ┇    ┠ name-00000034[34]
     ┇    ┗ name-00000035[35]
     ┗ name-00000036[36]
          ┠ name-00000037[37]
          ┠ name-00000038[38]
          ┗ name-00000039[39]


resource usage[level: 3, node number: 39]: 
        clock time: 0.001967s
        system cpu: 0.000169s
          user cpu: 0.001013s
      memory usage: 7208 byte

Salin selepas log masuk


PHP code
<!--

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

-->
<?php /**
 * 无限级(受尾节点描述算法限制, 详见tree_parse注释)递归菜单
 * author: selfimpr
 * blog: http://blog.csdn.net/lgg201
 * mail: lgg860911@yahoo.com.cn
 */

define('MAX_NODES',            3);                        /* 最大子节点数 */
define('MAX_NODE_INDEX',    MAX_NODES - 1);            /* 子节点最大索引值 */
define('NAME_FMT',            'name-%08d');                /* 节点内容输出格式串 */

/* 树节点数据结构 */
define('K_ID',                'id');
define('K_NAME',            'name');
define('K_CHILD',            'children');

/* 输出构造时使用的拼装字符 */
define('PREFIX_TOP',        '┏');                    /* 第一层第一个节点的标识符 */
define('PREFIX_BOTTOM',        '┗');                    /* 每一个父节点的最后一个子节点的标识符 */
define('PREFIX_MIDDLE',        '┠');                    /* 所有非上面两种情况的节点的标识符 */
define('PREFIX_LINE',        '┇');                    /* 祖先节点的连线符 */
define('SPACE',                ' ');                    /* 空白占位(所有尾节点不显示连线符) */
define('WIDE_SPACE',        str_repeat(SPACE, 4));    /* 宽的空白占位, 为了让树的层次清晰 */


/**
 * data_build 
 * 构造一个节点
 * @param mixed $id         节点id
 * @param mixed $is_leaf     是否叶子
 * @access public
 * @return void
 */
function node_build($id, $is_leaf = FALSE) {
    return array(
        K_ID    => $id, 
        K_NAME    => sprintf(NAME_FMT, $id), 
        K_CHILD    => $is_leaf ? NULL : array(), 
    );
}
/**
 * tree_build 
 * 构造一棵树(树中每个节点的子节点数由MAX_NODES确定)
 * @param mixed $datas     要返回的树引用
 * @param mixed $id     起始ID
 * @param mixed $level     树的层级
 * @access public
 * @return void
 */
function tree_build(&$datas, &$id, $level) {
    if ( $level  0 ) {
        $i    = 0;
        /* 前缀格式: "父级连线" ["宽空白符" "父级连线" ...] "宽空白符" */
        $string    .= ($is_last & 1  $data ) {
        /* 当前节点及所有祖先是否尾节点标记 */
        $tmp_is_last    = $is_last  0 ) 
        $sum    += pow($s, $n --);
    return $sum;
}
/* 计算ruage时间 */
function ru_time($info, $type) {
    return $info[$type . '.tv_sec'] + $info[$type . '.tv_usec'] / 1000000;
}
/* 输出资源使用情况 */
function resource_usage($lv, $nodes, $cb, $ce, $mb, $me, $rb, $re) {
    printf("\nresource usage[level: %d, node number: %d]: \n%20s%0.6fs\n%20s%0.6fs\n%20s%0.6fs\n%20s%d byte\n", 
        $lv, $nodes,
        'clock time: ',        $ce - $cb, 
        'system cpu: ',        ru_time($re, 'ru_stime') - ru_time($rb, 'ru_stime'), 
        'user cpu: ',        ru_time($re, 'ru_utime') - ru_time($rb, 'ru_utime'), 
        'memory usage: ',    $me - $mb);
}
/* 用法 */
function usage($cmd) {
    printf("usage: \n%s <tree deepth>\n", $cmd);
    exit;
}

/* 测试入口函数 */
function run() {
    global    $argc, $argv;

    if ( $argc != 2 || intval($argv[1]) 
                 
              
              
        
            </tree>
Salin selepas log masuk
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.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

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)

Tukar jenis data asas kepada rentetan menggunakan fungsi String.valueOf() Java Tukar jenis data asas kepada rentetan menggunakan fungsi String.valueOf() Java Jul 24, 2023 pm 07:55 PM

Tukar jenis data asas kepada rentetan menggunakan fungsi String.valueOf() Java Dalam pembangunan Java, apabila kita perlu menukar jenis data asas kepada rentetan, kaedah biasa ialah menggunakan fungsi valueOf() kelas String. Fungsi ini boleh menerima parameter jenis data asas dan mengembalikan perwakilan rentetan yang sepadan. Dalam artikel ini, kami akan meneroka cara menggunakan fungsi String.valueOf() untuk penukaran jenis data asas dan menyediakan beberapa contoh kod untuk

Bagaimana untuk menukar tatasusunan char kepada rentetan Bagaimana untuk menukar tatasusunan char kepada rentetan Jun 09, 2023 am 10:04 AM

Kaedah menukar tatasusunan char kepada rentetan: Ia boleh dicapai dengan penugasan Gunakan sintaks {char a[]=" abc d\0efg ";string s=a;} untuk membenarkan tatasusunan char terus memberikan nilai kepada rentetan, dan laksanakan. kod untuk melengkapkan penukaran.

Gunakan fungsi String.replace() Java untuk menggantikan aksara (rentetan) dalam rentetan Gunakan fungsi String.replace() Java untuk menggantikan aksara (rentetan) dalam rentetan Jul 25, 2023 pm 05:16 PM

Gantikan aksara (rentetan) dalam rentetan menggunakan fungsi String.replace() Java Dalam Java, rentetan ialah objek tidak boleh ubah, yang bermaksud apabila objek rentetan dicipta, nilainya tidak boleh diubah suai. Walau bagaimanapun, anda mungkin menghadapi situasi di mana anda perlu menggantikan aksara atau rentetan tertentu dalam rentetan. Pada masa ini, kita boleh menggunakan kaedah replace() dalam kelas String Java untuk melaksanakan penggantian rentetan. Kaedah replace() kelas String mempunyai dua jenis:

2w perkataan penjelasan terperinci String, yyds 2w perkataan penjelasan terperinci String, yyds Aug 24, 2023 pm 03:56 PM

Salam semua, hari ini saya akan berkongsi dengan anda pengetahuan asas Java: String. Tidak perlu diperkatakan kepentingan kelas String, ia boleh dikatakan sebagai kelas yang paling banyak digunakan dalam pembangunan back-end kami, jadi adalah perlu untuk membincangkannya.

Gunakan fungsi String.length() java untuk mendapatkan panjang rentetan Gunakan fungsi String.length() java untuk mendapatkan panjang rentetan Jul 25, 2023 am 09:09 AM

Gunakan fungsi String.length() Java untuk mendapatkan panjang rentetan Dalam pengaturcaraan Java, rentetan ialah jenis data yang sangat biasa Kita selalunya perlu mendapatkan panjang rentetan, iaitu bilangan aksara dalam rentetan. Di Java, kita boleh menggunakan fungsi length() kelas String untuk mendapatkan panjang rentetan. Berikut ialah kod contoh mudah: publicclassStringLengthExample{publ

Bagaimana untuk menggunakan kelas String java Bagaimana untuk menggunakan kelas String java Apr 19, 2023 pm 01:19 PM

1. Memahami String1 dalam JDK Pertama, mari kita lihat kod sumber kelas String dalam JDK Ia melaksanakan banyak antara muka. Anda boleh melihat bahawa kelas String diubah suai diwarisi dan tiada subkelas kelas String, supaya semua orang yang menggunakan JDK menggunakan kelas String yang sama dua orang yang berbeza Menggunakan kaedah yang sama menunjukkan hasil yang berbeza, yang menjadikannya mustahil untuk membangunkan kod Warisan dan kaedah mengatasi bukan sahaja membawa fleksibiliti, tetapi juga menyebabkan banyak subkelas berkelakuan berbeza.

Cara menggunakan kaedah split dalam Java String Cara menggunakan kaedah split dalam Java String May 02, 2023 am 09:37 AM

Kaedah split dalam String menggunakan kaedah split() String untuk memisahkan String mengikut aksara atau rentetan yang masuk dan mengembalikan tatasusunan split. 1. Penggunaan umum Apabila menggunakan aksara umum, seperti @ atau, sebagai pemisah: Stringaddress="Shanghai@Shanghai City@Minhang District@Wuzhong Road";String[]splitAddr=address.split("@");System .out. println(splitAddr[0]+splitAddr[1]+splitAddr[2]+splitAddr[3

Kemahiran penukaran jenis bait fungsi Golang, rune dan rentetan Kemahiran penukaran jenis bait fungsi Golang, rune dan rentetan May 17, 2023 am 08:21 AM

Dalam pengaturcaraan Golang, jenis bait, rune dan rentetan adalah jenis data yang sangat asas dan biasa. Mereka memainkan peranan penting dalam memproses operasi data seperti rentetan dan aliran fail. Apabila melakukan operasi data ini, kita biasanya perlu menukarnya kepada satu sama lain, yang memerlukan penguasaan beberapa kemahiran penukaran. Artikel ini akan memperkenalkan teknik penukaran jenis bait, rune dan rentetan bagi fungsi Golang, bertujuan untuk membantu pembaca memahami dengan lebih baik jenis data ini dan dapat mengaplikasikannya dengan mahir dalam amalan pengaturcaraan.

See all articles