PHP 数据库树的遍历方法

  代码如下:

  

复制代码 代码如下:

  <?php

  session_start();

  define ('P_S', PATH_SEPARATOR);

  define ('ROOT', "./");

  set_include_path(ROOT .P_S .'Zend' .P_S .ROOT.get_include_path());

  //加载ZEND 框架

  require_once ROOT.'Zend/Loader.php';

  require_once 'usercheck.php';//加载访问权限

  Zend_Loader::loadFile('function.class.php', $dirs='class/', $once=false);//加载函数

  Zend_Loader::loadClass('Zend_Db');//加载数据库类

  Zend_Loader::loadClass('Zend_Config_Ini');//加载配置类

  $config = new Zend_Config_Ini('config.php', 'general');//创建配置对象

  $db = Zend_Db::factory($config->db->adapter,$config->db->config->toArray());//创建数据库对象

  $select=$db->select();

  $select->from('ResClass',array('lsh','name'));

  $select->where('steps = 1');

  $rs=$db->fetchAll($select);

  foreach ($rs as $res){

  echo '    '.$res['lsh'].$res['name']."<br>";

  Visit($res['lsh'],1);

  }

  function Visit($nodeid,$stept){

  global $db;

  $recordset = "SELECT lsh,name FROM ResClass WHERE parent=".$nodeid; //搜索nodeid的所有下层节点

  $rs=$db->fetchAll($recordset);

  foreach($rs as $rss){

  if(!$rss)

  return; //已经是叶子节点,直接返回

  else{

  for ($i=0;$i<4*$stept;$i++){

  echo " ";

  }

  echo '    '.$rss['lsh'].$rss['name']."<br>";

  Visit($rss['lsh'],$stept+1);

  }

  }

  }

  ?>