请问这段代码是递归吗?帮忙解释一下
也是在csdn上找的,能用,但不是很明白原理
/*
id bid name
1 0 足球
2 0 篮球
3 1 巴西
4 1 中国
5 3 罗纳尔多
6 4 米卢
*/
$array[0] = array("id"=>1,"bid"=>0,"name"=>"足球");
$array[1] = array("id"=>2,"bid"=>0,"name"=>"篮球");
$array[2] = array("id"=>3,"bid"=>1,"name"=>"巴西");
$array[3] = array("id"=>4,"bid"=>1,"name"=>"中国");
$array[4] = array("id"=>5,"bid"=>3,"name"=>"罗纳尔多");
$array[5] = array("id"=>6,"bid"=>4,"name"=>"米卢");//tree array -- copy some codes from joomla
$tree = array();
if( $array ){
foreach ( $array as $v ){
$pt = $v['bid'];
$list = @$tree[$pt] ? $tree[$pt] : array();
array_push( $list, $v );
$tree[$pt] = $list;
}
}//foreach root node
foreach($tree[0] as $k=>$v)
{
echo $v['name']."<br/>";
if($tree[$v['id']]) drawTree($tree[$v['id']],$tree,0);
}
//foreach child node
function drawTree($arr,$tree,$level)
{
$level++;
$prefix = str_pad("|",$level+1,'-',STR_PAD_RIGHT);
foreach($arr as $k2=>$v2)
{
echo $prefix.$v2['name']."<br/>";
if($tree[$v2['id']]) drawTree($tree[$v2['id']],$tree,$level);
}
}
exit;
也是在csdn上找的,能用,但不是很明白原理
/*
id bid name
1 0 足球
2 0 篮球
3 1 巴西
4 1 中国
5 3 罗纳尔多
6 4 米卢
*/
$array[0] = array("id"=>1,"bid"=>0,"name"=>"足球");
$array[1] = array("id"=>2,"bid"=>0,"name"=>"篮球");
$array[2] = array("id"=>3,"bid"=>1,"name"=>"巴西");
$array[3] = array("id"=>4,"bid"=>1,"name"=>"中国");
$array[4] = array("id"=>5,"bid"=>3,"name"=>"罗纳尔多");
$array[5] = array("id"=>6,"bid"=>4,"name"=>"米卢");//tree array -- copy some codes from joomla
$tree = array();
if( $array ){
foreach ( $array as $v ){
$pt = $v['bid'];
$list = @$tree[$pt] ? $tree[$pt] : array();
array_push( $list, $v );
$tree[$pt] = $list;
}
}//foreach root node
foreach($tree[0] as $k=>$v)
{
echo $v['name']."<br/>";
if($tree[$v['id']]) drawTree($tree[$v['id']],$tree,0);
}
//foreach child node
function drawTree($arr,$tree,$level)
{
$level++;
$prefix = str_pad("|",$level+1,'-',STR_PAD_RIGHT);
foreach($arr as $k2=>$v2)
{
echo $prefix.$v2['name']."<br/>";
if($tree[$v2['id']]) drawTree($tree[$v2['id']],$tree,$level);
}
}
exit;
解决方案 »
- php 循环显示问题
- 分页显示问题 急
- 一个PHP 数组合并问题,请高手帮忙处理,在线等~~!!!
- 很简单的问题求助(在线等)
- 不知道这个问题算不酸怪[PHP MYSQL]
- 我不知道怎么说,大家进来看吧!~~~~~~
- 有用过PEAR(PHP Extension and Application Repository)的兄弟们?进来说说。
- 几个php的初学者准备开发一个小工项目,考虑到整体水平,决定按以下方案开发,请大家给点建议!
- 好心的人们,快进来帮帮我吧!
- 用PHP画图的问题
- PHP 总是报错 这个 大家帮忙看下代码syntax error, unexpected $end in
- 求助:随机显示指定目录里面的图片?
此为树型结构
bid = 0 表示的是树的根,此处根有: 足球 篮球两个
bid = 1 表示的是id = 1($array[0]) 的子类 此处有两个 巴西 中国
bid = 3 表示的是id = 3($array[2]) 的子类
bid = 4 表示的是id = 4($array[3]) 的子类
*/
$array[0] = array("id"=>1,"bid"=>0,"name"=>"足球");
$array[1] = array("id"=>2,"bid"=>0,"name"=>"篮球");
$array[2] = array("id"=>3,"bid"=>1,"name"=>"巴西");
$array[3] = array("id"=>4,"bid"=>1,"name"=>"中国");
$array[4] = array("id"=>5,"bid"=>3,"name"=>"罗纳尔多");
$array[5] = array("id"=>6,"bid"=>4,"name"=>"米卢");//tree array -- copy some codes from joomla
$tree = array();
if( $array ){
foreach ( $array as $v ){
$pt = $v['bid']; //通过循环得到bid的值,如:0,0,1,1,3,4
$list = @$tree[$pt] ? $tree[$pt] : array();
array_push( $list, $v );//将一个或多个单元压入数组的末尾
$tree[$pt] = $list; //一级级组成多维数组
}
}
/*
结构如下:
0 =>
array
0 =>
array
'id' => int 1
'bid' => int 0
'name' => string '足球' (length=6)
1 =>
array
'id' => int 2
'bid' => int 0
'name' => string '篮球' (length=6)
1 =>
array
0 =>
array
'id' => int 3
'bid' => int 1
'name' => string '巴西' (length=6)
1 =>
array
'id' => int 4
'bid' => int 1
'name' => string '中国' (length=6)
3 =>
array
0 =>
array
'id' => int 5
'bid' => int 3
'name' => string '罗纳尔多' (length=12)
4 =>
array
0 =>
array
'id' => int 6
'bid' => int 4
'name' => string '米卢' (length=6)
*///foreach root node 从树根开始
foreach($tree[0] as $k=>$v)
{
echo $v['name']."<br/>";
if($tree[$v['id']]) drawTree($tree[$v['id']],$tree,0);
}//foreach child node
/*
string str_pad ( string , int pad_length , string pad_string , int pad_type);
string 指定字符串,pad_length指定长度,pad_string用来填充的字符串(可选参数),pad_type指定填充位置(可选参数,STR_PAD_LEFT,STR_PAD_BOTH);
此函数为递归
*/
function drawTree($arr,$tree,$level)
{
$level++;
$prefix = str_pad("|",$level+1,'-',STR_PAD_RIGHT);
foreach($arr as $k2=>$v2)
{
echo $prefix.$v2['name']."<br/>";
if($tree[$v2['id']]) drawTree($tree[$v2['id']],$tree,$level);
}
}
exit;咱也是半桶水,全为个人理解