PHP利用递归法获取多级类别的树状数组

数据结构:category(id, pid, name),对应:信息ID,父项ID,类别名

测试数据:

$aryCate = array(
	array('id' => 1, 'pid' => 0, 'name' => 'Level0'),
	array('id' => 2, 'pid' => 1, 'name' => 'Level0_1'),
	array('id' => 3, 'pid' => 2, 'name' => 'Level0_1_1'),
	array('id' => 4, 'pid' => 3, 'name' => 'Level0_1_1_1'),
	array('id' => 5, 'pid' => 3, 'name' => 'Level0_1_1_2'),

	array('id' => 6, 'pid' => 0, 'name' => 'Level0'),
	array('id' => 7, 'pid' => 6, 'name' => 'Level0_2'),
	array('id' => 8, 'pid' => 7, 'name' => 'Level0_2_1'),
	array('id' => 9, 'pid' => 8, 'name' => 'Level0_2_1_1'),
	array('id' => 10, 'pid' => 8, 'name' => 'Level0_2_1_2'),

	array('id' => 11, 'pid' => 0, 'name' => 'Level0'),
	array('id' => 12, 'pid' => 11, 'name' => 'Level0_3'),
	array('id' => 13, 'pid' => 12, 'name' => 'Level0_3_1'),
	array('id' => 14, 'pid' => 13, 'name' => 'Level0_3_1_1'),
	array('id' => 15, 'pid' => 13, 'name' => 'Level0_3_1_2'),

	array('id' => 16, 'pid' => 0, 'name' => 'Level0'),

	array('id' => 17, 'pid' => 1, 'name' => 'Level0_2'),
);

+++++++++++++++++++++++++++++

代码:

/**
 * 利用递归法获取无限极类别的树状数组
 * @param array $ary 数据库读取数组
 * @param int $pid 父级ID(顶级类别的pid为0)
 * @param int $level 返回的树状层级
 * @param int $i 层级起始值
 * @return array 返回树状数组
 */
function aryTree($ary = array(), $pid = 0, $level = 10, $i = 1){

    $arr = array();

    foreach($ary as $rs){

        if($rs['pid'] == $pid){

            if($i <= $level){
                $arr[$rs['id']] = $rs;
            }else{
                break;
            }

            $n = $i;
            $n++;

            $sub = aryTree($ary, $rs['id'],  $level, $n);
            empty($sub) OR $arr[$rs['id']]['sub'] = $sub;

        }else{
            continue;
        }
    }

    return $arr;
}
posted @ 2014-02-21 14:56  再見理想  阅读(1196)  评论(0编辑  收藏  举报