php高效递归无限分类,超强php无限级分类,不用递归 - 邓应国博客

综合所有需求,不用递归,不用担心数据是否排序,速度惊人。不多说

不需要看懂为什么,用的爽就行,快速无限递归

不懂问我,万能无限分级。

/**

* @param $arr 数据库里获取的结果集,不论是健名,还是健名为id,自动转换

* @param string $id

* @param string $pid

* @param string $link 关联符

* @param string $p_c 为child时下级为子类,为parent下级为父类

* @return mixed 返回值,数组每个参数带有下级,不是下拉类型是类表

*/

function tree_list_universal($arr, $id='id', $pid='pid',$link='child',$p_c='child') {

$t=array();

if(array_keys($arr)[0]==0){

foreach($arr as $v){

is_object($v) && $v = $v->toArray();

$t[$v[$id]] = $v;

}

$arr=$t;

}

foreach ($arr as $k => $item){

is_object($item) && $item = $item->toArray();

if( $item[$pid] ){

if($p_c=='parent'){

if( ! isset($t[$item[$pid]][$link][$item[$pid]]) )

$t[$item[$id]][$link][$item[$pid]] =& $t[$item[$pid]];

}

else{

$t[$item[$pid]][$link][$item[$id]] =& $t[$k];

}

}

}

return $t;

}

怎么用看注释,重点解释,tree_list_universal是用来列表显示,需要每条数据带有上级或者下级使用

/**

* @param $items 数据库里获取的结果集,不论是健名,还是健名为id,自动转换

* @param string $id

* @param string $pid

* @param string $link 关联符

* @param null $parent 为选择想要的下级id,举个栗子:id=1 pid=0 那么$prent=0取得id=1的数据

* @return array 返回值,拉类型模式,下级被上级回收,下级就不会显示在列表上

*/

function tree_select_universal($arr,$id='id',$pid='pid',$link='child',$parent=null){

$tree = array();

if(array_keys($arr)[0]==0){

foreach($arr as $v){

is_object($v) && $v = $v->toArray();

$t[$v[$id]] = $v;

}

$arr=$t;

}

foreach($arr as $item){

is_object($item) && $item = $item->toArray();

if(isset($parent)){

$arr[$item[$pid]][$link][$item[$id]] = &$arr[$item[$id]];

}else{

if(isset($arr[$item[$pid]])){

$arr[$item[$pid]][$link][] = &$items[$item[$id]];

}else{

$tree[] = &$arr[$item[$id]];

}

}

}

return isset($parent) ? $arr[$parent][$link] : $tree;

}

tree_select_universal   是用来下拉显示,具体下拉需要什么样的数据结构不多说,是在想不出来,问我,$parent参数可以不带,那么显示当前所有数据分级了,这解决了一些数据结构不知道pid是多少问题,带参数时候就制定返回当前指定的子集。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值