php实现无限级分类

2018-02-03     浏览次数:

现在的开发过程中,无限级分类是很常见的一个功能,接下来吾爱编程为大家分享一个无限级分类的方法:

<?php
//从数据库中取出的分类数据
$original_array(
    array(
        'id' => 1,
        'pid' => 0,
        'name' => '新闻分类'
    ),
    array(
        'id' => 2,
        'pid' => 0,
        'name' => '最新公告'
    ),
    array(
        'id' => 3,
        'pid' => 1,
        'name' => '国内新闻'
    ),
    array(
        'id' => 4,
        'pid' => 1,
        'name' => '国际新闻'
    ),
    array(
        'id' => 5,
        'pid' => 0,
        'name' => '图片分类'
    ),
    array(
        'id' => 6,
        'pid' => 5,
        'name' => '新闻图片'
    ),
    array(
        'id' => 7,
        'pid' => 5,
        'name' => '其它图片'
    ),
),


//整理函数
/**
 * 生成无限级树算法
 * @param  array  $arr                输入数组
 * @param  number $pid                根级的pid
 * @param  string $column_name        列名,id|pid父id的名字|children子数组的键名
 * @return array  $ret
 */
function make_tree($arr, $pid = 0, $column_name = 'id|pid|children') {
    list($idname, $pidname, $cldname) = explode('|', $column_name);
    $ret = array();
    foreach ($arr as $k => $v) {
        if ($v [$pidname] == $pid) {
            $tmp = $arr [$k];
            unset($arr [$k]);
            $tmp [$cldname] = make_tree($arr, $v [$idname], $column_name);
            $ret [] = $tmp;
        }
    }
    return $ret;
}

//整理函数的使用
$output_array = make_tree($original_array);
//整理后的分类数据
$output_array = array(
    array(
        'id' => 1,
        'pid' => 0,
        'name' => '新闻分类',
        'children' => array(
            array(
                'id' => 3,
                'pid' => 1,
                'name' => '国内新闻'
            ),
            array(
                'id' => 4,
                'pid' => 1,
                'name' => '国际新闻'
            ),
        ),
    ),
    array(
        'id' => 2,
        'pid' => 0,
        'name' => '最新公告',
    ),
    array(
        'id' => 5,
        'pid' => 0,
        'name' => '图片分类',
        'children' => array(
            array(
                'id' => 6,
                'pid' => 5,
                'name' => '新闻图片'
            ),
            array(
                'id' => 7,
                'pid' => 5,
                'name' => '其它图片'
            ),
        ),
    ),
);
*转载请注明出处,更多资料尽在 吾爱编程
返回吾爱编程首页