Notepad++Good Luck To You!

递归和非递规实现无限级分类
浏览: 1627    评论: 0

<?php/***///准备数组,代替从数据库中检索出的数据(共有三个必须字段id,name,pid)header("content-type:text/html;charset=utf-8");$categories=ar...


<?php

/**

 */

//准备数组,代替从数据库中检索出的数据(共有三个必须字段id,name,pid)

header("content-type:text/html;charset=utf-8");

$categories = array(

    array('id'=>1,'name'=>'电脑','pid'=>0),

    array('id'=>2,'name'=>'手机','pid'=>0),

    array('id'=>3,'name'=>'笔记本','pid'=>1),

    array('id'=>4,'name'=>'台式机','pid'=>1),

    array('id'=>5,'name'=>'智能机','pid'=>2),

    array('id'=>6,'name'=>'功能机','pid'=>2),

    array('id'=>7,'name'=>'超级本','pid'=>3),

    array('id'=>8,'name'=>'游戏本','pid'=>3),

);


/*======================非递归实现========================*/

$tree = array();

//第一步,将分类id作为数组key,并创建children单元

foreach($categories as $category){

    $tree[$category['id']] = $category;

    $tree[$category['id']]['children'] = array();

}

//第二步,利用引用,将每个分类添加到父类children数组中,这样一次遍历即可形成树形结构。

foreach($tree as $key=>$item){

    if($item['pid'] != 0){

        $tree[$item['pid']]['children'][] = &$tree[$key];//注意:此处必须传引用否则结果不对

        if($tree[$key]['children'] == null){

            unset($tree[$key]['children']); //如果children为空,则删除该children元素(可选)

        }

    }

}

////第三步,删除无用的非根节点数据

foreach($tree as $key=>$category){

    if($category['pid'] != 0){

        unset($tree[$key]);

    }

}


print_r($tree);


/*======================递归实现========================*/

$tree = $categories;

function get_attr($a,$pid){

    $tree = array();                                //每次都声明一个新数组用来放子元素

    foreach($a as $v){

        if($v['pid'] == $pid){                      //匹配子记录

            $v['children'] = get_attr($a,$v['id']); //递归获取子记录

            if($v['children'] == null){

                unset($v['children']);             //如果子元素为空则unset()进行删除,说明已经到该分支的最后一个元素了(可选)

            }

            $tree[] = $v;                           //将记录存入新数组

        }

    }

    return $tree;                                  //返回新数组

}

echo "<br/><br/><br/>";


print_r(get_attr($tree,0));


全文详见:http://xpxw.com/?id=113

TOP


«    2024年10月    »
123456
78910111213
14151617181920
21222324252627
28293031
TOP 搜索
TOP 控制面板
您好,欢迎到访网站!
  查看权限
TOP 最新留言
    TOP 作者列表
    TOP 站点信息
    • 文章总数:163
    • 页面总数:0
    • 分类总数:6
    • 标签总数:20
    • 评论总数:0
    • 浏览总数:361552