php递归无限极
⑴ php递归无限级分类的问题,有高手来解答下
<?php
$arr=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'=>'深圳市'),
);
functiongenerateTree($items){
foreach($itemsas$item){
$items[$item['pid']]['son'][]=&$items[$item['id']];
}
returnisset($items[0]['son'])?$items[0]['son']:array();
}
print_r(generateTree($arr));
?>
⑵ php递归无限极分类怎么弄
给个函数你,调用get_category()就是一个数组格式的结果
function get_category($parent_id=0){
$arr=array();
$sql = "select * from category where parent_id=$parent_id";//查询子级数据
$result = array(a_object,b_object,,,)=sql_query($sql);//查询结果一个数组或列表格式,自己完善。
if($result){
foreach($result as $re){//循环数组
if(get_category($re.id))//如果子级不为空
$re['child'] = get_category($re.id);
$arr[] = $re;
}
return $arr;
}
⑶ PHP 无限级分类, 二维数组, 递归调用问题
$subs = array();
表示定义并初始化一个数组,
这样后面的循环里就可以对这个数组进行操作,比如添加数据,
不加也能正常工作,但是不推荐,
初始化变量是一个良好的开发习惯
⑷ 几十万条数据用PHP递归能实现无限级分类吗
数据量大就使用分页和异步查询,一次查询全部出来 ,内存肯定是吃不消的,运行时间也会比较久。
⑸ php无限极分类查找父级生成树形结构子级在最顶层,怎么办
一般这种问题需要使用嵌套函数,PHP也是支持嵌套函数的,就是不停的调用自身,直到符合条件后退出函数循环,这样就能找出它所有的父级了,在c语言的时候也学过,理解起来还是比较容易的。
⑹ 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递归循环无限级,求解!
递归加入一个符号参数,如"空格",递归列表时把符号多连接上一倍,再输出
<?php
$arr=array(
0=>array(
'name'=>'first',
'_child'=>array(
0=>array(
'name'=>'second',
'_child'=>array(
0=>array(
'name'=>'three',
'_child'=>array()
),
1=>array(
'name'=>'three',
'_child'=>array()
),
2=>array(
'name'=>'three',
'_child'=>array()
),
)
),
1=>array(
'name'=>'second',
'_child'=>array(
0=>array(
'name'=>'three',
'_child'=>array()
),
1=>array(
'name'=>'three',
'_child'=>array()
),
2=>array(
'name'=>'three',
'_child'=>array()
),
)
),
),
)
);
functionechoData($arr,$str){
$str.=' ';
foreach($arras$k=>$v){
echo$str.$v['name'].'<br>';
if(count($v['_child'])){
echoData($v['_child'],$str);
}
}
}
echoData($arr,'');
?>
⑻ php 递归问题,想要将数据按照无限极分类的样式显示出来
首先 将json 解码成数组, 用json_decode 函数 注意 一定要加上第二个参数 否则他会返回一个对象。接下来就是地递归了。这是一个最简单的递归只要逐个遍历即可。
下面是完整的代码:
$data=json_decode($str,true);
$options=getChildren($data);
functiongetChildren($parent,$deep=0){
foreach($parentas$row){
$data[]=array("id"=>$row['id'],"name"=>$row['name'],"pid"=>$row['parentid'],'deep'=>$deep);
if($row['childs']){
$data=array_merge($data,getChildren($row['childs'],$deep+1));
}
}
return$data;
}
?>
<selectname=""id="">
<?phpforeach($optionsas$row){?>
<optionvalue="<?phpecho$row['id']?>"><?phpechostr_pad("",$row['deep']*3,"-",STR_PAD_RIGHT);?><?phpecho$row['name'];?></option>
<?php}?>
</select>
以上代码已测试通过 效果图如下
⑼ PHP递归无限分类的 如何统计总条数 以及对显示的结果进行分页比如设置为每页显示10个 。
每个节点都要记录子节点的数量c。每新增一个节点都要对各父和祖节点的子节点计数加1。这样根节点会有总数的记录。
这样递归遍历时也可以根据子节点数量c的来确定读取的数量限制。比如 读取条数计数<10 就继续递归
在每个节点的表上 增加子节点的id集或计数,增加根节点到父节点路径,会方便这些操作。
⑽ 感觉PHP的递归好难啊,特别是无限级分类,怎样可以很容易理解递归,理解无限级分类呀
递归很好理解啊,一般情况下都是用阶乘来入门的。
无级分类算法是典型的递归操作。但在实际开发一般用伪无级分类,无级分类当分类级次多,每个分类节点多的情况下效率不高。因此作为学数据结构算法,需要学一下无级分类的算法,如果是实际开发,用伪无级分类好一些。