很多站长朋友们都不太清楚php递归无限级分类,今天小编就来给大家整理php递归无限级分类,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 如何使用PHP实现无限级分类 2、 PHP无限级分类 3、 PHP 无限级分类, 二维数组, 递归调用问题 4、 感觉PHP的递归好难啊,特别是无限级分类,怎样可以很容易理解递归,理解无限级分类呀 5、 php 几种常用的递归 无限极分类 如何使用PHP实现无限级分类你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了。
这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,巧在引用,整理分享了。
复制代码代码如下:
function generateTree($items){
$tree = array();
foreach($items as $item){
if(isset($items[$item['pid']])){
$items[$item['pid']]['son'][] = $items[$item['id']];
}else{
$tree[] = $items[$item['id']];
}
}
return $tree;
}
$items = array(
1 => array('id' => 1, 'pid' => 0, 'name' => '安徽省'),
2 => array('id' => 2, 'pid' => 0, 'name' => '浙江省'),
3 => array('id' => 3, 'pid' => 1, 'name' => '合肥市'),
4 => array('id' => 4, 'pid' => 3, 'name' => '长丰县'),
5 => array('id' => 5, 'pid' => 1, 'name' => '安庆市'),
);
print_r(generateTree($items));
可以看到下面打印的结果:
复制代码代码如下:
Array
(
[0] => Array
(
[id] => 1
[pid] => 0
[name] => 安徽省
[son] => Array
(
[0] => Array
(
[id] => 3
[pid] => 1
[name] => 合肥市
[son] => Array
(
[0] => Array
(
[id] => 4
[pid] => 3
[name] => 长丰县
)
)
)
[1] => Array
(
[id] => 5
[pid] => 1
[name] => 安庆市
)
)
)
[1] => Array
(
[id] => 2
[pid] => 0
[name] => 浙江省
)
)
上面生成树方法还可以精简到5行:
复制代码代码如下:
function generateTree($items){
foreach($items as $item)
$items[$item['pid']]['son'][$item['id']] = $items[$item['id']];
return isset($items[0]['son']) ? $items[0]['son'] : array();
}
上面这种无限极分类数据树形结构化的方法值得借鉴。但是我觉得这段代码实际用途并不明显啊,你想取出格式化的树形数据还是要递归啊:
复制代码代码如下:
/**
* 如何取数据格式化的树形数据
*/
$tree = generateTree($items);
function getTreeData($tree){
foreach($tree as $t){
echo $t['name'].'<br>';
if(isset($t['son'])){
getTreeData($t['son']);
}
}
}
getTreeData($tree);
PHP无限级分类主要是利用函数的递归,然后在无下级的条件下退出递归!
这个是我自己写的一个函数,无限树型的你参考下吧!
function getCategoryTree($TID, $iTable,$url,$urlPar="1=1") {
if ($TID == 0) {
$treeStr = $treeStr."<ul id=\"tree\" class=\"lightTreeview treeview-black\">";
}
$sql = "select * from `$iTable` where TID1 = ".$TID." order by orderid";
$rs = mysql_query($sql);
while ($ary = mysql_fetch_array($rs)) {
$treeStr = $treeStr."<li>";
$rs2 = mysql_query("select count(*) from `$iTable` where TID1 = ".$ary["id"]);
$Vcount = @mysql_result($rs2, 0);
if ($Vcount != 0) {
$treeStr = $treeStr."<div class=\"treeview-folder\">".$ary["title"]."</div><ul style=\"display:none\">";
$treeStr = $treeStr.getCategoryTree($ary["id"], $iTable,$url,$urlPar);
$treeStr = $treeStr."</ul>";
} else {
$treeStr = $treeStr."<div class=\"treeview-file\"><a href=\"".$url."?T=".$ary["id"]."".$urlPar."\" target=\"pro\">".$ary["title"]."</a></div>";
}
$treeStr = $treeStr."</li>";
}@mysql_free_result($rs);
if ($TID == 0) {
$treeStr = $treeStr."</ul>";
}
return $treeStr;
}
PHP 无限级分类, 二维数组, 递归调用问题$subs = array();
表示定义并初始化一个数组,
这样后面的循环里就可以对这个数组进行操作,比如添加数据,
不加也能正常工作,但是不推荐,
初始化变量是一个良好的开发习惯
感觉PHP的递归好难啊,特别是无限级分类,怎样可以很容易理解递归,理解无限级分类呀递归很好理解啊,一般情况下都是用阶乘来入门的。
无级分类算法是典型的递归操作。但在实际开发一般用伪无级分类,无级分类当分类级次多,每个分类节点多的情况下效率不高。因此作为学数据结构算法,需要学一下无级分类的算法,如果是实际开发,用伪无级分类好一些。
php 几种常用的递归 无限极分类/**
* 递归实现无限极分类
* @param $array 分类数据
* @param $pid 父ID
* @param $level 分类级别
* @return $list 分好类的数组 直接遍历即可 $level可以用来遍历缩进
*/
function getTree($array, $pid =0, $level = 0){
//声明静态数组,避免递归调用时,多次声明导致数组覆盖
static $list = []; foreach ($array as $key => $value){ //第一次遍历,找到父节点为根节点的节点 也就是pid=0的节点
if ($value['pid'] == $pid){ //父节点为根节点的节点,级别为0,也就是第一级
$value['level'] = $level; //把数组放到list中
$list[] = $value; //把这个节点从数组中移除,减少后续递归消耗
unset($array[$key]); //开始递归,查找父ID为该节点ID的节点,级别则为原级别+1
getTree($array, $value['id'], $level+1);
}
}
关于php递归无限级分类的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。
查看更多关于php递归无限级分类 php递归函数详解的详细内容...