请问这段代码是递归吗?帮忙解释一下
也是在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;

解决方案 »

  1.   

    /*
    此为树型结构
    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;咱也是半桶水,全为个人理解