高效的php无限分类下拉菜单
->
header('Content-type: text/html; charset=gb2312');
//以下是接收的数据格式
//$array[0] = array("id"=>1,"pid"=>0,"name"=>"诛求");
//$array[1] = array("id"=>2,"pid"=>0,"name"=>"2");
//$array[2] = array("id"=>3,"pid"=>1,"name"=>"3");
//$array[3] = array("id"=>4,"pid"=>1,"name"=>"4");
//$array[4] = array("id"=>5,"pid"=>2,"name"=>"5");
//$array[5] = array("id"=>6,"pid"=>4,"name"=>"6");
//$array[6] = array("id"=>7,"name"=>"66","pid"=>6);
draw($array);//执行,已经改成下拉菜单形式
function draw($array){
//tree array -- copy some codes from joomla
$tree = array();
if( $array ){
foreach ( $array as $v ){
$pt = $v['pid'];
$list = @$tree[$pt] ? $tree[$pt] : array();
array_push( $list, $v );
$tree[$pt] = $list;
}
}
//foreach root node
echo $sel="
";
}
//foreach child node
function drawTree($arr,$tree,$level)
{
$level++;
$prefix = str_pad("|",$level+1,'-',STR_PAD_RIGHT);
foreach($arr as $k2=>$v2)
{
echo "
";
if($tree[$v2['id']]) drawTree($tree[$v2['id']],$tree,$level);
}
}
上面方法的最大特点是一次查询把所有的分类数据取出,然后再对数组进行排序操作,效率很高,效果如下:

链接源:http://www.zeevin.com/?p=17