php无限分类递归
① 几十万条数据用php递归能实现无限级分类吗
数据量大就使用分页和异步查询,一次查询全部出来 ,内存肯定是吃不消的,运行时间也会比较久。
② PHP递归无限分类的 如何统计总条数 以及对显示的结果进行分页比如设置为每页显示10个 。
每个节点都要记录子节点的数量c。每新增一个节点都要对各父和祖节点的子节点计数加1。这样根节点会有总数的记录。
这样递归遍历时也可以根据子节点数量c的来确定读取的数量限制。比如 读取条数计数<10 就继续递归
在每个节点的表上 增加子节点的id集或计数,增加根节点到父节点路径,会方便这些操作。
③ php递归无限分类缩进怎么做 急啊
<?php
folder();
// 主要是 $tab 参数,该参数为当前分类缩进层次
function folder($parentid = 0, $tab = 0) {
$sql = "SELECT * FROM choin_article_sort WHERE parentid = '{$parentid}' ORDER BY id DESC";
$query = mysql_query($sql);
while ($rs = mysql_fetch_array($query)) {
// 输出推荐使用 echo 命令
echo str_repeat('-', $tab); // 缩进填充符你可以自己设定,也可以是图片等等
echo '中间循环出的内容';
folder($rs["id"], $tab + 1);
}
}
?>
④ 急求PHP递归无限分类,当前位置写法
<?php
$testArray = array();
function getSort($num,&$testArray){
$db = new mysqli("localhost","root","123456","test");
$sql = "select * from test where bid=".$num;
$result = $db->query($sql);
if($result){
$search = array();
while($row=$result->fetch_assoc()){
$testArray[] = $row['cloumnsname'];
$search[] = $row['id'];
}
foreach($search as $key=>$value){
getSort($value,$testArray);
}
}
}
$testArray[] = "首页";
getSort(0,$testArray);
$test = implode(">",$testArray);
echo $test;
?>
有不懂的可以问我!
⑤ php无限极分类实现的方法
初始化的数据
//初始化原始数据(id=>编号,name=>显示名称,pid=>父级目录id,sort=>排序顺序)$data[1]=array('id'=>'1','name'=>'一级目录A','pid'=>'0','sort'=>'1');
$data[2]=array('id'=>'2','name'=>'一级目录B','pid'=>'0','sort'=>'2');
$data[3]=array('id'=>'3','name'=>'一级目录C','pid'=>'0','sort'=>'3');
$data[4]=array('id'=>'4','name'=>'一级目录D','pid'=>'0','sort'=>'4');
$data[5]=array('id'=>'5','name'=>'二级目录A-1','pid'=>'1','sort'=>'1');
$data[6]=array('id'=>'6','name'=>'二级目录A-2','pid'=>'1','sort'=>'2');
$data[7]=array('id'=>'7','name'=>'二级目录A-3','pid'=>'1','sort'=>'3');
$data[8]=array('id'=>'8','name'=>'二级目录B-1','pid'=>'2','sort'=>'1');
$data[9]=array('id'=>'9','name'=>'二级目录B-2','pid'=>'2','sort'=>'2');
$data[10]=array('id'=>'10','name'=>'二级目录B-3','pid'=>'2','sort'=>'3');
$data[11]=array('id'=>'11','name'=>'二级目录C-1','pid'=>'3','sort'=>'2');
$data[12]=array('id'=>'12','name'=>'二级目录D-1','pid'=>'4','sort'=>'1');
$data[13]=array('id'=>'13','name'=>'二级目录D-2','pid'=>'4','sort'=>'2');
$data[14]=array('id'=>'14','name'=>'三级目录A-2-1','pid'=>'6','sort'=>'1');
$data[15]=array('id'=>'15','name'=>'三级目录A-2-2','pid'=>'6','sort'=>'2');
$data[16]=array('id'=>'16','name'=>'三级目录C-1-1','pid'=>'11','sort'=>'1');
$data[17]=array('id'=>'17','name'=>'三级目录B-2-1','pid'=>'9','sort'=>'2');
显示树结构
functionprintTree($data,$level=0){foreach($dataas$key=>$value){for($i=0;$i<=$level;$i++){echo'  ';
}echo$value['name'];echo'<br>';if(!empty($value['children'])){
printTree($value['children'],$level+1);
}
}
}
使用递归的方式获取无限极分类数组
functiongetNodeTree(&$list,&$tree,$pid=0){foreach($listas$key=>$value){if($pid==$value['pid']){
$tree[$value['id']]=$value;unset($list[$key]);
getNodeTree($list,$tree[$value['id']]['children'],$value['id']);
}
}
}
使用引用-无限极分类
functioncreateNodeTree(&$list,&$tree){foreach($listas$key=>$node){if(isset($list[$node['pid']])){
$list[$node['pid']]['children'][]=&$list[$key];
}else{
$tree[]=&$list[$node['id']];
}
}
}
调用
//递归-无限极分类调用getNodeTree($data,$tree);
printTree($tree);//使用引用-无限极分类调用createNodeTree($data,$tree);
printTree($tree);
⑥ php 几种常用的递归 无限极分类
/**
*递归实现无限极分类
*@param$array分类数据
*@param$pid父ID
*@param$level分类级别
*@return$list分好类的数组直接遍历即可$level可以用来遍历缩进
*/
functiongetTree($array,$pid=0,$level=0){
//声明静态数组,避免递归调用时,多次声明导致数组覆盖
static$list=[];foreach($arrayas$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 无限级分类, 二维数组, 递归调用问题
$subs = array();
表示定义并初始化一个数组,
这样后面的循环里就可以对这个数组进行操作,比如添加数据,
不加也能正常工作,但是不推荐,
初始化变量是一个良好的开发习惯
⑧ PHP MYSQL 请教 2个字段能无限分类吗
没懂你的CID,和scid 是什么。
无限分类是无限的树形结构么?
根据无限树形结构说一下。一般情况下 是用递归调用来处理的。字段中 用id 和parentid 两个字段。 假设有一个函数 fetch是取mysql 数据的。简单写一个函数
function getdata($parentid){
$tree=fetch("parentid = {$parentid}");
foreach($tree as $k=> $v){
$tree[$k]['children']=getdata($v['id']);
}
return $tree;
}
调用$tree=getdata(0);
$tree 就是树形的。
当然 如果有用框架估计更简单点。比如laravel 。定义一个$tree的模型,表中有id,和parentid两字段。模型中新增两个函数
public function childrentree()
{
return $this->hasMany(get_class($this), 'parentid', 'id');
}
public function children()
{
return $this->childrentree();
}
然后使用
tree::with(["children"])->where('parentid', 0)->get(); 就可以获取树形菜单
⑨ 感觉PHP的递归好难啊,特别是无限级分类,怎样可以很容易理解递归,理解无限级分类呀
递归很好理解啊,一般情况下都是用阶乘来入门的。
无级分类算法是典型的递归操作。但在实际开发一般用伪无级分类,无级分类当分类级次多,每个分类节点多的情况下效率不高。因此作为学数据结构算法,需要学一下无级分类的算法,如果是实际开发,用伪无级分类好一些。