一、.将示例 无极限分类
1.创建示例:
注:pid代表上级目录,level代表目录深度
<?php
header("content-type='text/html;charset=utf-8");
$arr = array(
array('id'=>1,'name'=>'时事新闻','pid'=>0,'level'=>0),
array('id'=>2,'name'=>'体育新闻','pid'=>0,'level'=>0),
array('id'=>3,'name'=>'国内新闻','pid'=>1,'level'=>1),
array('id'=>4,'name'=>'足球新闻','pid'=>2,'level'=>1),
array('id'=>5,'name'=>'国际新闻','pid'=>1,'level'=>1),
array('id'=>6,'name'=>'欧洲足球','pid'=>4,'level'=>2),
array('id'=>7,'name'=>'篮球新闻','pid'=>2,'level'=>1),
array('id'=>8,'name'=>'西甲','pid'=>6,'level'=>3),
array('id'=>9,'name'=>'NBA','pid'=>7,'level'=>2)
);
2.输出示例:
- 补充说明:
- 要输出完整的树型结构,必须使用递归。(因为不知道深度是多少)。
function getTree($arr,$pid=0)
{
foreach ($arr as $value) {
if ($value['pid'] == $pid) {
//在输出节点名称之前,根据level的值,来决定输出多少个空格
echo str_repeat(' ',$value['level']). $value['name'] . "<br>";
//2.每输出一个顶级节点,继续输出其所有子节点:
getTree($arr,$value['id']);
}
}
}
getTree($arr);
3.将原始数组(从数据库读出来的数组)改造成可直接使用foreach循环的数组,可直接用foreach来进行遍历,方便在视图当中直接使用foreach/colist直接输出。
改造思路:原来是输出,现在保存到一个新数组,当函数结束执行时,return新数组即可。
function getTree($arr,$pid=0)
{
//使用static之后,内存中就只有一份$result变量
static $result = array();
foreach ($arr as $value) {
if ($value['pid'] == $pid) {
//每次输出节点名时,将节点的整个数组保存到新数组
$result[] = $value;
//调用getTree进行递归
getTree($arr,$value['id']);
}
}
return $result;
}
$a = getTree($arr);
print_r($a);