php实现无限极分类

PHP piniu 1280浏览 0评论

所用测试数据

$arr = array(
	array('id' => 1, 'name' => '系统设置', 'pid' => 0),
	array('id' => 2, 'name' => '菜单设置', 'pid' => 0),
	array('id' => 3, 'name' => '添加菜单', 'pid' => 2),
	array('id' => 4, 'name' => '编辑菜单', 'pid' => 2),
	array('id' => 7, 'name' => '修改菜单', 'pid' => 4),
	array('id' => 5, 'name' => '网站设置', 'pid' => 1),
	array('id' => 6, 'name' => '支付设置', 'pid' => 0)
);

1. 树形结构(格式一)

<?php
/**
     * @description
     * @param array  $arr 传入的二维数组
     * @param string $pk 主键id
     * @param string $name 分类名称
     * @param string $upid 表示父级id的字段
     * @param int    $root 根级别(最高父级一般为0)
     * @param int    $index 层级
     * @return array
     */
    function getTree($arr = array(),$pk='id',$name='name',$upid='pid',$root=0,$index=0){
        $tree = array();
        foreach ($arr as $k=>$value) {
            if($value[$upid]==$root){
                $value[$name] = str_repeat('|--', $index).$value[$name];
                $tree[] = $value;
                $tree = array_merge($tree,getTree($arr, $pk, $name, $upid, $value[$pk], $index+1));
            }
        }
        return $tree;
    }

?>

效果如下:

2.子目录结构(格式二)

<?php
/**
     * @description
     * @param array  $arr 二维数组
     * @param string $pk 主键id
     * @param string $upid 表示父级id的字段
     * @param string $child 子目录的键
     * @return array
     */
    function getTree($arr=array(),$pk='id',$upid='pid',$child='child'){
        $items = array();
        foreach($arr as $val){
            $items[$val[$pk]] = $val;
        }
        $tree = array();
        foreach($items as $k=>$val){
            if(isset($items[$val[$upid]])){
                $items[$val[$upid]][$child][]=&$items[$k];
            }else{
                $tree[] = &$items[$k];
            }
        }
        return $tree;
    }

?>

效果如下:


发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • * 昵称:
  • * 邮箱: