function get_tree($table,$parent_id=0,$level=1){
global $db; global $tpf;global $smarty;
$sql= "SELECT id,cate_name as name FROM `{$tpf}$table` WHERE `parent_id`=$parent_id ORDER BY id DESC";
$res = $db->get_result_rows($sql); //取得一记录以二维数组返回 $arr[0]['id']'$arr[1]['name']
static $arr = array();
foreach($res as $key=>$rows){
$arr[$key]['id'] = $rows['id'];
$arr[$key]['name'] = $rows['name'];
$arr[$key]['level'] = $level;
get_tree($table,$rows['id'],$level+1);
}
return $arr;
}
$c = get_tree("str_news_categories");
print_r($c);我测试了返回的数组结果是错误!

解决方案 »

  1.   

    数据库类:
    class Mysql {
    /**
     * mysql连接执行类,将sql的执行实现数据库无关性
     * 
     *
     *
     */ /**
      * 类变量定义
      * @param $conn mysql连接号
      * @param $error 错误代号
      * @param $username/$password 数据库连接用户名和密码
      * @param array $err_info 错误信息
      * 
      * @param $debuginfo 调试信息
      * @param $table 当前操作数据表
      */
     var $conn; 
     var $error;
     var $username = "";
     var $password = "";
     var $host;
     var $database;
     var $err_info = array(
      0 => "没有错误!",
      1 => "数据库连接失败!",
      2 => "sql执行出错!"
     );
     var $debuginfo="";
     var $table; function Mysql( $arr=null ) {
      if( is_array($arr) ) {//var_dump($arr);
       $this->set_login( $arr['host'] , $arr['username'] , $arr['password'] );
       $this->set_db( $arr['database'] );
       $this->set_conn();
       if( isset($this->error) && $this->error!=0 ) die($this->err_info[$this->error]);
      }
     } /**
      * 设置数据库名
      * @param string $database
      *
      * return void
      */
     function set_db ( $dbfile ){
      $this->database = $dbfile;
     }
     /**
      * 设置连接数据库的用户名和密码
      * @param string $user 用户名
      * @param string $pwd 密码
      *
      * @return void
      */
     function set_login ( $host , $user , $pwd ){
     
      $this->host=$host;
      $this->username=$user;
      $this->password=$pwd;
      
     }
     
     /**
      * 创建数据库连接
      * @param 
      * return void
      */
     function set_conn (){
     
      $this->conn=@mysql_connect($this->host,$this->username,$this->password );
      @mysql_query("set character set utf8");
      @mysql_query("set names utf8");
       
      if ( isset($this->conn) && @mysql_select_db($this->database) ) 
       $this->error=0;
      else 
       $this->error=1;
     }
     
     /**
      * 设置当前操作的数据表
      * @param string $tb
      * 
      * @return void
      */
     function set_table( $tb ) {
      $this->table = $tb; 
     }
     
     /**
      * 获取数据表总条数
      * @param array $condition 条件数组 
      * @param string $tb 要操作的数据表
     **/
     function get_count( $tb = "" , $condition = null ) {
       if (empty( $tb )) $tb = $this->table;
       else $this->table=$tb;
       
       $sql = "select count(*) as c from `$tb`";
       
       if( isset($condition) ) $sql.=" where $condition";   return $this->get_result_rows($sql);
     }
     
     /**
      * 返回sql查询结果
      * @param string $sql sql语句
      *
      * @return #id 
      */
     function get_result( $sql ){
      $result = @mysql_query( $sql , $this->conn );
      if(!$result) $this->error = 2;
      else return $result;
     }
     
     /**
      * 获取查询的结果
      * @param string $sql
      * 
      * @return array 结果的二维数组
      */
     function get_result_rows( $sql ){
      $array = array() ;
      $result = $this->get_result( $sql );
      while( $row = @mysql_fetch_assoc( $result ) )
       $array[] = $row ;
      return $array;
     }
      //获取一个二维数据表,以一个字体为一维下标
     //$id 默认做下标的字段
     function get_result_id( $sql, $id='id' ) {
    $arr = $this->get_result_rows( $sql );
    $arr2 = array();
    for($i=0; $i<count($arr); $i++){
    $j = $arr[$i][$id];
    $arr2[$j] = $arr[$i];
    }
    return $arr2;
     }
     
     /**
      * 获取部分查询结果
      * 
      * @param Array 数组
      * @return Array 
      */
     function get_query_result( $cols , $tb=null , $condition=null , $order=null , $limit=null , $start=0 ) {
      if( empty($tb) ) $tb=$this->table;
      else $this->table=$tb;
      if( @is_array($cols) ) $col="`".implode('`,`',$cols)."`";
      else $col = $cols;  $sql = "select $col from `$tb`";
      if( isset($condition) ) $sql.=" where $condition";
      if( isset($order) ) $sql.=" order by $order";
      if( isset($limit) ) $sql.=" limit $start,$limit";  return $this->get_result_rows($sql);
     } /**
      * 执行数据库插入操作
      * 
      * @param $sql作表
      */
     function insert_info( $sql ) {
      return $this->get_result( $sql );
     }
     
     /**
      * 执行数据库更新操作
      * 
      * @param array $sql
      */
     function update_info( $sql ) {
      return $this->get_result( $sql );  
     }
     
    }数据库SQL:
    SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";--
    -- 数据库: `mystr`
    ---- ----------------------------------------------------------
    -- 表的结构 `str_news_categories`
    --CREATE TABLE `str_news_categories` (
      `id` smallint(5) unsigned NOT NULL auto_increment,
      `parent_id` smallint(5) NOT NULL default '0',
      `cate_name` varchar(50) character set utf8 NOT NULL,
      `sort_order` smallint(4) NOT NULL default '1',
      PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;--
    -- 导出表中的数据 `str_news_categories`
    --INSERT INTO `str_news_categories` (`id`, `parent_id`, `cate_name`, `sort_order`) VALUES
    (1, 0, '热点新闻', 1),
    (2, 0, '娱乐新闻', 1),
    (3, 0, '企业新闻', 1),
    (4, 0, 'IT新闻', 1),
    (5, 3, '私企新闻', 2),
    (6, 3, '行业新闻', 1),
    (7, 6, '大磊', 1);
    写的递归函数:function get_tree($table,$parent_id=0,$level=1){
    global $db; global $tpf;global $smarty;
    $sql= "SELECT id,cate_name as name FROM `{$tpf}$table` WHERE `parent_id`=$parent_id ORDER BY id DESC";
    $res = $db->get_result_rows($sql); //取得一记录以二维数组返回 $arr[0]['id']'$arr[1]['name']
    static $arr = array();
    foreach($res as $key=>$rows){
    $arr[$key]['id'] = $rows['id'];
    $arr[$key]['name'] = $rows['name'];
    $arr[$key]['level'] = $level;
    get_tree($table,$rows['id'],$level+1);
    }
    return $arr;
    }
    $c = get_tree("str_news_categories");
    print_r($c);
      

  2.   

    function get_tree($table,$parent_id=0,$level=1){
    global $db; global $tpf;global $smarty;
    $sql= "SELECT id,cate_name as name FROM `{$tpf}$table` WHERE `parent_id`=$parent_id ORDER BY id DESC";
    $res = $db->get_result_rows($sql); //取得一记录以二维数组返回 $arr[0]['id']'$arr[1]['name']
    $arr = array();
    foreach($res as $key=>$rows){
    $arr[$key]['id'] = $rows['id'];
    $arr[$key]['name'] = $rows['name'];
    $arr[$key]['level'] = $level;
    $arr[$key]['child']=get_tree($table,$rows['id'],$level+1);
    }
    return $arr;
    }
    $c = get_tree("str_news_categories");
    print_r($c);