php递归循环php 无限分类 非递归级,求解!

PHP不使用递归的无限级分类简单实例_网页漂亮网
您的位置: >
PHP不使用递归的无限级分类简单实例
字号:[ & & & & & &
不用递归实现无限级分类,简单测试了下性能比递归稍好一点点点,但写得太复杂了,还是递归简单方便点
$list = array(
array('id'=&1, 'pid'=&0, 'deep'=&0, 'name'=&'test1'),
array('id'=&2, 'pid'=&1, 'deep'=&1, 'name'=&'test2'),
array('id'=&3, 'pid'=&0, 'deep'=&0, 'name'=&'test3'),
array('id'=&4, 'pid'=&2, 'deep'=&2, 'name'=&'test4'),
array('id'=&5, 'pid'=&2, 'deep'=&2, 'name'=&'test5'),
array('id'=&6, 'pid'=&0, 'deep'=&0, 'name'=&'test6'),
array('id'=&7, 'pid'=&2, 'deep'=&2, 'name'=&'test7'),
array('id'=&8, 'pid'=&5, 'deep'=&3, 'name'=&'test8'),
array('id'=&9, 'pid'=&3, 'deep'=&2, 'name'=&'test9'),
function resolve($list) {
$newList = $manages = $deeps = $inDeeps = array();
foreach ($list as $row) {
$newList[$row['id']] = $
foreach ($newList as $row) {
if (! isset($manages[$row['pid']]) || ! isset($manages[$row['pid']]['children'][$row['id']])) {
if ($row['pid'] & 0 && ! isset($manages[$row['pid']]['children'])) $manages[$row['pid']] = $newList[$row['pid']];
$manages[$row['pid']]['children'][$row['id']] = $
if (! isset($inDeeps[$row['deep']]) || ! in_array($row['id'], $inDeeps[$row['deep']])) {
$inDeeps[$row['deep']][] = array($row['pid'], $row['id']);
krsort($inDeeps);
array_shift($inDeeps);
foreach ($inDeeps as $deep =& $ids) {
foreach ($ids as $m) {
// 存在子栏目的进行转移
if (isset($manages[$m[1]])) {
$manages[$m[0]]['children'][$m[1]] = $manages[$m[1]];
$manages[$m[1]] =
unset($manages[$m[1]]);
return $manages[0]['children'];
function resolve2(& $list, $pid = 0) {
$manages = array();
foreach ($list as $row) {
if ($row['pid'] == $pid) {
$manages[$row['id']] = $
$children = resolve2($list, $row['id']);
$children && $manages[$row['id']]['children'] = $
以上这篇PHP不使用递归的无限级分类简单实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持网页漂亮网。
本文移动端链接:
相关阅读:
本站已经安全运行:
创建百年品牌php无限极分类递归排序实现方法
本文实例讲述了无限极分类递归排序实现方法。分享给大家供大家参考。具体实现方法如下:
代码如下:function order ($array,$pid=0){
&&& $arr = array();
&&& foreach($array as $v){
&&&&&&& if($v['pid']==$pid){
&&&&&&&&&&& $arr[] = $v;
&&&&&&&&&&& $arr = array_merge($arr,order($array,$v['id']));
&&& return $
希望本文所述对大家的PHP程序设计有所帮助。
顶一下(0) 踩一下(0)
热门标签:> php递归无限级分类【先序遍历算】,获取任意节点上所有子孩子
php递归无限级分类【先序遍历算】,获取任意节点上所有子孩子
joy666com & &
发布时间: & &
浏览:11 & &
回复:0 & &
悬赏:0.0希赛币
php递归无限级分类,获取任意节点下所有子孩子  & php
  * 递归无限级分类,获取任意节点下所有子孩子
  *@paramarray
$arrCate 待排序的数组
  *@paramint
$parent_id 父级节点
  *@paramint
$level 层级数
  *@returnarray
$arrTree 排序后的数组
  functiongetMenuTree($arrCat,
$parent_id = 0, $level = 0)
  static&$arrTree
=array();//使用static代替global
  if(empty($arrCat))return
  $level++;
  foreach($arrCatas$key
=& $value)
  if($value['parent_id']
== $parent_id)
  $value['level']
  $arrTree[] = $
  unset($arrCat[$key]);//注销当前节点数据,减少已无用的遍历
  getMenuTree($arrCat, $value['id'],
  return$arrT
  * 测试数据
  $arrCate =array(&//待排序数组
  array('id'=&1,'name'=$>$顶级栏目一','parent_id'=&0),
  array('id'=&2,'name'=$>$顶级栏目二','parent_id'=&0),
  array('id'=&3,'name'=$>$栏目三','parent_id'=&1),
  array('id'=&4,'name'=$>$栏目四','parent_id'=&3),
  array('id'=&5,'name'=$>$栏目五','parent_id'=&4),
  array('id'=&6,'name'=$>$栏目六','parent_id'=&2),
  array('id'=&7,'name'=$>$栏目七','parent_id'=&6),
  array('id'=&8,'name'=$>$栏目八','parent_id'=&6),
  array('id'=&9,'name'=$>$栏目九','parent_id'=&7),
  header('Content-type:text/
charset=utf-8');//设置utf-8编码
  echo'&pre$>$;
  print_r(getMenuTree($arrCate, 0, 0));
  echo'&/pre$>$;
  123宝贝网()
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&简单 用循环代替递归 的 php 无限级分类处理 -
阿全博客 - 红豆博客
用户ID:& 11
用户名:& 周工
昵称:& 周全
简单 用循环代替递归 的 php 无限级分类处理
<?php//要处理的数组$arr = array(&&&&&&& array('id'=>1,'name'=>'分类1','pid'=>0),&&&&&&& array('id'=>2,'name'=>'分类2','pid'=>0),&&&&&&& array('id'=>3,'name'=>'分类3','pid'=>1),&&&&&&& array('id'=>4,'name'=>'分类4','pid'=>3),&&&&&&& array('id'=>5,'name'=>'分类5','pid'=>4),&&&&&&& array('id'=>6,'name'=>'分类6','pid'=>2),&&&&&&& array('id'=>7,'name'=>'分类7','pid'=>6),&&&&&&& array('id'=>8,'name'=>'分类8','pid'=>5),&&&&&&& array('id'=>9,'name'=>'分类9','pid'=>8),);echo getCatelujin(9);/*&* @参数$id 当前分类ID&* @参数$depth 深度 0 则不考虑 一直寻找到最高 大于0说明深度是受限的&*/function getCatelujin($id ,$depth = 0){&&& global $&&& $str = ''; $id = (int)$ $i = 0; $depth = (int)$&&& while(true){&&&&&& if($depth && $i >= $depth) //超过深度 跳出循环 避免死循环&&&&&& if($id == 0) //但ID被替换后的值为0 说明是顶级了&&&&&& $is_right =//限定条件 是否在数组内&&&&&& foreach($arr as $k=>$v){//循环数组&&&&&&&&& $is_right =&&&&&&&&& if($v['id'] == $id){//条件&&&&&&&&&&&&& $is_right =&&&&&&&&&&&&& if(empty($str)){&&&&&&&&&&&&&&&&& $str = $v['name'];&&&&&&&&&&&&& }else{&&&&&&&&&&&&&&& $str = $v['name'] &#46; ' > '&#46;$//行程路径&&&&&&&&&&&&& }&&&&&&&&&&&&& $id = (int)$v['pid']; //重新赋值ID 进行循环下一个条件&&&&&&&&&&&&& unset($arr[$k]);//将取到的数据从数组中剔除&&&&&&&&&&&&&&&&&&&&&& }&&&&&&&&& &&&&&& }&&&&&& if(!$is_right)&&&&&& ++$i;&&& }&&& &&& return $}?>
你好吗?太好了。
| &(0) | &(2124) | &

我要回帖

更多关于 php数组递归无限分类 的文章

 

随机推荐