[分享]PHP兑现树的递归展示
[分享]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>
测试输出:
- 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
- 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: [email protected] */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>

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











Java の String.valueOf() 関数を使用して基本データ型を文字列に変換する Java 開発で基本データ型を文字列に変換する必要がある場合、一般的な方法は String クラスの valueOf() 関数を使用することです。この関数は、基本データ型のパラメータを受け入れ、対応する文字列表現を返すことができます。この記事では、基本的なデータ型変換に String.valueOf() 関数を使用する方法を検討し、いくつかのコード例を提供します。

char配列をstringに変換する方法:代入によって実現できます {char a[]=" abc d\0efg ";string s=a;} 構文を使用して、char配列にstringに値を直接代入させて実行します変換を完了するためのコード。

皆さんこんにちは。今日は Java の基本知識である String についてお話します。 String クラスの重要性は言うまでもなく、バックエンド開発で最もよく使用されるクラスであるため、説明する必要があります。

Java の String.replace() 関数を使用して文字列内の文字 (文字列) を置換する Java では、文字列は不変オブジェクトです。つまり、文字列オブジェクトが作成されると、その値は変更できません。ただし、文字列内の特定の文字または文字列を置換する必要がある状況が発生する場合があります。現時点では、Java の String クラスの replace() メソッドを使用して文字列置換を実装できます。 String クラスの replace() メソッドには 2 つのタイプがあります。

文字列の長さを取得するには、Java の String.length() 関数を使用します。Java プログラミングでは、文字列は非常に一般的なデータ型です。多くの場合、文字列の長さ、つまり文字列内の文字数を取得する必要があります。 Java では、String クラスの length() 関数を使用して文字列の長さを取得できます。簡単なコード例を次に示します。 publicclassStringLengthExample{publ

1. JDK の String1. String を理解する まず、JDK の String クラスのソース コードを見てみましょう. これには多くのインターフェイスが実装されています. String クラスは Final によって変更されていることがわかります. これは、String クラスができないことを意味しますString. クラスのサブクラスは継承されず、String. クラスのサブクラスは存在しないため、JDK を使用するすべての人が同じ String クラスを使用します。String の継承が許可されている場合、誰もが String を拡張できます。全員が異なるバージョンの String を使用し、2 人の異なる人が String. クラスを使用します。同じメソッドでも異なる結果が表示されるため、コードの開発が不可能になります。継承とメソッドのオーバーライドは柔軟性をもたらすだけでなく、多くのサブクラスの動作が異なる原因になります。

String の Split メソッドは、String の Split() メソッドを使用して、受信する文字または文字列に従って String を分割し、分割された配列を返します。 1. 一般的な使用法 @ や区切り文字などの一般的な文字を使用する場合: Stringaddress="Shanghai@Shanghai City@Minhang District@Wuzhong Road";String[]splitAddr=address.split("@");System .out。 println(splitAddr[0]+splitAddr[1]+splitAddr[2]+splitAddr[3]

Golang プログラミングでは、バイト、ルーン、文字列型は非常に基本的で一般的なデータ型です。これらは、文字列やファイル ストリームなどのデータ操作の処理において重要な役割を果たします。これらのデータ操作を実行するときは、通常、データを相互に変換する必要があるため、変換スキルを習得する必要があります。この記事では、読者がこれらのデータ型をより深く理解し、プログラミングの実践に上手に適用できるようにすることを目的として、Golang 関数のバイト、ルーン、および文字列の型変換テクニックを紹介します。
