- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章php 无限级分类,超级简单的无限级分类,支持输出树状图由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
无平台限制 只需要告知id,parentid,name 即可 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
|
<?php
error_reporting
(E_ALL ^ E_NOTICE);
class
Tree
{
/**
+------------------------------------------------
* 生成树型结构所需要的2维数组
+------------------------------------------------
* @author abc
+------------------------------------------------
* @var Array
*/
var
$arr
=
array
();
/**
+------------------------------------------------
* 生成树型结构所需修饰符号,可以换成图片
+------------------------------------------------
* @author abc
+------------------------------------------------
* @var Array
*/
var
$icon
=
array
(
' │'
,
' ├'
,
' └'
);
/**
* @access private
*/
var
$ret
=
''
;
/**
* 构造函数,初始化类
* @param array 2维数组,例如:
* array(
* 1 => array('id'=>'1','parentid'=>0,'name'=>'一级栏目一'),
* 2 => array('id'=>'2','parentid'=>0,'name'=>'一级栏目二'),
* 3 => array('id'=>'3','parentid'=>1,'name'=>'二级栏目一'),
* 4 => array('id'=>'4','parentid'=>1,'name'=>'二级栏目二'),
* 5 => array('id'=>'5','parentid'=>2,'name'=>'二级栏目三'),
* 6 => array('id'=>'6','parentid'=>3,'name'=>'三级栏目一'),
* 7 => array('id'=>'7','parentid'=>3,'name'=>'三级栏目二')
* )
*/
function
tree(
$arr
=
array
())
{
$this
->arr =
$arr
;
$this
->ret =
''
;
return
is_array
(
$arr
);
}
/**
* 得到父级数组
* @param int
* @return array
*/
function
get_parent(
$myid
)
{
$newarr
=
array
();
if
(!isset(
$this
->arr[
$myid
]))
return
false;
$pid
=
$this
->arr[
$myid
][
'parentid'
];
$pid
=
$this
->arr[
$pid
][
'parentid'
];
if
(
is_array
(
$this
->arr))
{
foreach
(
$this
->arr
as
$id
=>
$a
)
{
if
(
$a
[
'parentid'
] ==
$pid
)
$newarr
[
$id
] =
$a
;
}
}
return
$newarr
;
}
/**
* 得到子级数组
* @param int
* @return array
*/
function
get_child(
$myid
)
{
$a
=
$newarr
=
array
();
if
(
is_array
(
$this
->arr))
{
foreach
(
$this
->arr
as
$id
=>
$a
)
{
if
(
$a
[
'parentid'
] ==
$myid
)
$newarr
[
$id
] =
$a
;
}
}
return
$newarr
?
$newarr
: false;
}
/**
* 得到当前位置数组
* @param int
* @return array
*/
function
get_pos(
$myid
,&
$newarr
)
{
$a
=
array
();
if
(!isset(
$this
->arr[
$myid
]))
return
false;
$newarr
[] =
$this
->arr[
$myid
];
$pid
=
$this
->arr[
$myid
][
'parentid'
];
if
(isset(
$this
->arr[
$pid
]))
{
$this
->get_pos(
$pid
,
$newarr
);
}
if
(
is_array
(
$newarr
))
{
krsort(
$newarr
);
foreach
(
$newarr
as
$v
)
{
$a
[
$v
[
'id'
]] =
$v
;
}
}
return
$a
;
}
/**
* -------------------------------------
* 得到树型结构
* -------------------------------------
* @author abc
* @param $myid 表示获得这个ID下的所有子级
* @param $str 生成树形结构基本代码, 例如: "<option value=\$id \$select>\$spacer\$name</option>"
* @param $sid 被选中的ID, 比如在做树形下拉框的时候需要用到
* @param $adds
* @param $str_group
*/
function
get_tree(
$myid
,
$str
,
$sid
= 0,
$adds
=
''
,
$str_group
=
''
)
{
$number
=1;
$child
=
$this
->get_child(
$myid
);
if
(
is_array
(
$child
)) {
$total
=
count
(
$child
);
foreach
(
$child
as
$id
=>
$a
) {
$j
=
$k
=
''
;
if
(
$number
==
$total
) {
$j
.=
$this
->icon[2];
}
else
{
$j
.=
$this
->icon[1];
$k
=
$adds
?
$this
->icon[0] :
''
;
}
$spacer
=
$adds
?
$adds
.
$j
:
''
;
$selected
=
$id
==
$sid
?
'selected'
:
''
;
@extract(
$a
);
$parentid
== 0 &&
$str_group
?
eval
(
"\$nstr = \"$str_group\";"
) :
eval
(
"\$nstr = \"$str\";"
);
$this
->ret .=
$nstr
;
$this
->get_tree(
$id
,
$str
,
$sid
,
$adds
.
$k
.
' '
,
$str_group
);
$number
++;
}
}
return
$this
->ret;
}
/**
* 同上一方法类似,但允许多选
*/
function
get_tree_multi(
$myid
,
$str
,
$sid
= 0,
$adds
=
''
)
{
$number
=1;
$child
=
$this
->get_child(
$myid
);
if
(
is_array
(
$child
))
{
$total
=
count
(
$child
);
foreach
(
$child
as
$id
=>
$a
)
{
$j
=
$k
=
''
;
if
(
$number
==
$total
)
{
$j
.=
$this
->icon[2];
}
else
{
$j
.=
$this
->icon[1];
$k
=
$adds
?
$this
->icon[0] :
''
;
}
$spacer
=
$adds
?
$adds
.
$j
:
''
;
$selected
=
$this
->have(
$sid
,
$id
) ?
'selected'
:
''
;
@extract(
$a
);
eval
(
"\$nstr = \"$str\";"
);
$this
->ret .=
$nstr
;
$this
->get_tree_multi(
$id
,
$str
,
$sid
,
$adds
.
$k
.
' '
);
$number
++;
}
}
return
$this
->ret;
}
function
have(
$list
,
$item
){
return
(
strpos
(
',,'
.
$list
.
','
,
','
.
$item
.
','
));
}
/**
+------------------------------------------------
* 格式化数组
+------------------------------------------------
* @author abc
+------------------------------------------------
*/
function
getArray(
$myid
=0,
$sid
=0,
$adds
=
''
)
{
$number
=1;
$child
=
$this
->get_child(
$myid
);
if
(
is_array
(
$child
)) {
$total
=
count
(
$child
);
foreach
(
$child
as
$id
=>
$a
) {
$j
=
$k
=
''
;
if
(
$number
==
$total
) {
$j
.=
$this
->icon[2];
}
else
{
$j
.=
$this
->icon[1];
$k
=
$adds
?
$this
->icon[0] :
''
;
}
$spacer
=
$adds
?
$adds
.
$j
:
''
;
@extract(
$a
);
$a
[
'name'
] =
$spacer
.
' '
.
$a
[
'name'
];
$this
->ret[
$a
[
'id'
]] =
$a
;
$fd
=
$adds
.
$k
.
' '
;
$this
->getArray(
$id
,
$sid
,
$fd
);
$number
++;
}
}
return
$this
->ret;
}
}
$data
=
array
(
1 =>
array
(
'id'
=>
'1'
,
'parentid'
=>0,
'name'
=>
'一级栏目一'
),
2 =>
array
(
'id'
=>
'2'
,
'parentid'
=>0,
'name'
=>
'一级栏目二'
),
3 =>
array
(
'id'
=>
'3'
,
'parentid'
=>1,
'name'
=>
'二级栏目一'
),
4 =>
array
(
'id'
=>
'4'
,
'parentid'
=>1,
'name'
=>
'二级栏目二'
),
5 =>
array
(
'id'
=>
'5'
,
'parentid'
=>2,
'name'
=>
'二级栏目三'
),
6 =>
array
(
'id'
=>
'6'
,
'parentid'
=>3,
'name'
=>
'三级栏目一'
),
7 =>
array
(
'id'
=>
'7'
,
'parentid'
=>3,
'name'
=>
''
),
8 =>
array
(
'id'
=>
'8'
,
'parentid'
=>3,
'name'
=>
'三级栏目三'
),
9 =>
array
(
'id'
=>
'9'
,
'parentid'
=>7,
'name'
=>
'四级分类三'
),
);
$tree
=
new
Tree;
$tree
->tree(
$data
);
// 如果使用数组, 请使用 getArray方法
//$tree->getArray();
// 下拉菜单选项使用 get_tree方法
$html
=
'<select name="tree">'
;
$str
=
"<option value=\$id \$select>\$spacer\$name</option>"
;
$html
.=
$tree
->get_tree(0,
$str
,-1).
'</select>'
;
echo
$html
;
?>
|
最后此篇关于php 无限级分类,超级简单的无限级分类,支持输出树状图的文章就讲到这里了,如果你想了解更多关于php 无限级分类,超级简单的无限级分类,支持输出树状图的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我的 processmaker 安装遇到了一些问题。我正在尝试使用本指南 [url]http://wiki.processmaker.com/index.php/ProcessMaker_Ubuntu
我正在使用 ShareKit。发送 SMS 消息使用 MFMessageComposeViewController,用户看到标题“文本”。我想将该标题更改为更能反射(reflect)实际可用内容的内容
我需要在我的一个针对 Gingerbread 的 Android 应用程序中使用操作栏和 fragment 的组合。所以我使用了 v7 支持库中的操作栏和 v4 支持库中的 fragment ,并使用
我明白为什么浏览器 vendor 不想帮助我阻止他们的 UI 线程。但是,我不明白为什么会有: Web Workers 中没有 sleep (2) 没有同步 WebSockets API 有一个syn
最近我的组织正在考虑使用 Docker。我们组使用的是cloudera CDH 5.1.2。 1) cloudera 是否与 Docker 容器兼容?2) docker 和cloudera 组合是否存
我正在尝试通过编译在 Mac 上安装 rsync 3.2.3。但是,我想安装所有功能。为此,它需要一些库,此处 ( https://download.samba.org/pub/rsync/INSTA
我一直在使用 PyDev 成功运行 nose 测试,并想试试 nose2。 所以我安装了它 pip install nose2 复制/粘贴来自 http://nose2.info/ 的示例代码进入名为
我想知道 LLVM 中是否有任何函数/方法可以在 LLVM IR 中添加 Open-MP 构造。 llvm-3.0 是否仍然支持 OpenMP 指令? 最佳答案 OpenMP 是一种高级语言扩展。因此
我对 CUDA 编程非常陌生。我正在浏览 SDK 附带的示例。我能够编译代码,但是当我运行它时,出现以下错误: "clock.cu(177) : CUDA Runtime API error 38:
RStudio 是用于 R 开发的出色 IDE。我想知道是否有任何方法可以很好地支持 HiDPI 分辨率? 我目前有 13 英寸显示器和 3200x1800 分辨率,甚至很难阅读 RStudio 选项
我正在寻找一种有助于为 Django 项目提供 RDF 支持的工具。 到目前为止,我发现了两个: django-rdf - 最后一次修改是在 4 年前,所以它看起来像是一个死项目。 djubby -
我刚刚尝试了一些 JS 核心原则,发现引擎评估链接的关系运算符而不会引发错误。相反,他们以我自己无法理解的方式进行评估。 console.log(1 4 > 3 > 2 > 1); //false,
我知道 etexteditor 和 vim/emacs。 是否有任何其他 Windows 编辑器支持类似 textmate 的片段(例如,您编写触发词,按 Tab,它更改为某些内容,再次按 Tab,它
我正在尝试找出验证给定集群的网络策略配置的最佳方法。 According to the documentation Network policies are implemented by the ne
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
Z3 会支持 AUFBV 吗? 对于以下脚本: (set-logic AUFBV) (declare-fun x () (_ BitVec 16)) (declare-const t (Array (
使用分部类编写 NUnit 测试的优缺点是什么? 我要开始了: 亲:可以测试私有(private)方法 缺点:TDD 不再可能了 还有什么? 最佳答案 缺点:要么您必须测试与您发布的版本不同的构建,要
它很容易(对于 90% 的 aop 特性)在没有任何语言本身支持的情况下做到这一点,就像大多数动态语言如 python 和 ruby 一样。然而,Dojo在 1.3.2 上直接支持它.最新版本发生
我在我的 android 应用程序中使用亚洲字符,我已经了解到某些字符无法显示,因为系统字体不支持它们。我查询了一个包含亚洲字符的数据库,并且经常检索到无法显示的标志。这些情况对我的应用程序来说通常不
你好,我想实现一个控件,我想在用户键入@字符时启用该控件,直到未填充运行文本中的空格为止,它应该显示用户列表,@符号后键入的文本应该显示基于键盘字符的建议,就像我们在上面看到的那样Twitter 或
我是一名优秀的程序员,十分优秀!