【发布时间】:2015-08-22 21:18:54
【问题描述】:
我正在尝试创建一系列<ul> 和<li> 来创建目录/文件结构来导航从以dB 为单位的表创建的一些文件。表 (tb_lib_manual) 包含文件和文件夹。
如果记录的 fileID 为空条目,则它是文件夹而不是文件。每条记录都有一个 parentID 来显示哪个文件夹是父文件夹,对于根目录中的文件和文件夹,这是 0。
php 代码是这样的:
class library_folders extends system_pageElement
{
private $html = '';
private $i = 0;
private $stmtArray = array();
private $objectArray = array();
function __construct()
{
parent::__construct();
$this->nextList();
}
function nextList($parentID = 0)
{
$qSQL = 'SELECT * FROM tb_lib_manual WHERE parentID=:parentID';
$stmtArray[$this->i] = $this->dbConnection->prepare($qSQL);
$stmtArray[$this->i]->bindValue(':parentID', $parentID, PDO::PARAM_INT);
$stmtArray[$this->i]->execute();
if($stmtArray[$this->i]->rowCount() > 0)
{
$display ='';
if($parentID != 0)
{
$display = ' style="display:none"';
}
$this->html .= '<ul' . $display . '>';
}
while ($this->objectArray[$this->i] = $stmtArray[$this->i]->fetchObject())
{
$this->html .= '<li>' . $this->objectArray[$this->i]->title;
if($this->objectArray[$this->i]->fileID == null)
{
//we have a folder!
$manualID = $this->objectArray[$this->i]->manualID;
$this->i ++;
$this->nextList($manualID);
$this->i--;
}
$this->html .= '</li>';
}
if($stmtArray[$this->i]->rowCount() > 0)
{
$this->html .= '</ul>';
}
echo $this->html;
}
function __destruct()
{
parent::__destruct();
}
}
问题是当代码在调用自身后返回到 while 循环时,它会重新启动循环,而不是继续它离开的地方,从而导致子文件夹中的重复。有没有更好的方法来做到这一点,还是我做错了什么!?
表格如下:
输出如下: '
- 手册
- 手册
- 文件夹 1
- NASA 演习
- 手册
- 手册
- 文件夹 1
- NASA 演习
【问题讨论】:
-
manualID和ParentID一样吗?
-
是的,很抱歉应该解释一下,显然不同的列...
-
您可以放置一些变量的调试输出,例如
var_dump($manualID);。 -
嗨,抱歉不知道如何放置调试输出,因为我无法让我的调试工作(aptana studio 3)但是表数据看起来像这样(刚刚编辑的问题)
-
我对@987654326@ 中的内容更感兴趣。我认为我们错过了课程的其他重要部分
标签: php mysql recursion pdo while-loop