【发布时间】:2017-08-29 13:50:29
【问题描述】:
我知道这个问题很多,但我无法让它正常工作。
我有什么 一个获取页面 id (fk_page) 的 PHP 函数。 在此函数内部,调用相同的函数来查找子页面。
我的数据库如下所示:
PHP 代码如下所示:
private function createNav($parent = 0, $sub = false) {
// *!* Create Nav
$getNavPage = $this->model->loadNav($parent); // array of menu items (fk_page) that have $parent as parent.
$NavPage = 0;
foreach ($getNavPage as $getPage) {
$NavPage = intval($getPage["fk_page"]);
$subnav = $this->createNav($NavPage, true); // get childs (recursive loop) and save fk_page in $subnav
if($sub === false) $this->navArr[$parent][] = $NavPage;
else $this->navArr[$parent][][] = $NavPage;
}
return $NavPage;
}
模型执行以下操作
public function loadNav($parent) {
$stmt = $this->pdo->prepare("SELECT fk_page FROM nav WHERE fk_parentpage = " . $parent . ";");
$stmt->execute();
return $stmt->fetchAll();
}
现在结果是一个看起来像这样的数组
array(3) {
[0]=>
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
int(3)
}
[2]=>
array(1) {
[0]=>
array(1) {
[0]=>
int(4)
}
}
[3]=>
array(2) {
[0]=>
array(1) {
[0]=>
int(5)
}
[1]=>
array(1) {
[0]=>
int(6)
}
}
}
我想要的结果:
array(3) {
[0]=>
array(3) {
[0]=>
int(1)
[1]=>
int(2)
[2]=>
array(1) {
[0]=>
array(1) {
[0]=>
int(4)
}
}
[3]=>
array(2) {
[0]=>
array(1) {
[0]=>
int(5)
}
[1]=>
array(1) {
[0]=>
int(6)
}
}
}
}
我相信 createNav() 必须在写入数组元素之前运行(甚至在数组 $this->NavArr 中),但我并没有真正成功。
【问题讨论】:
-
那么,在您的数据库中,您有 ID、Name、Parent ID 吗?
-
@BrianGottier 用数据库更新了问题。 fk = 外键
-
我有自己的方式来做你正在做的事情,但它们不太相似,而且代码太多,无法评论。即便如此,即使您没有确切的 ID、名称和父 ID,您仍然有父子层次结构的概念。也许这可以帮助:gist.github.com/anonymous/f4e5f1b1dd4878e394ec0ef2322e4cc4
标签: php recursion navigation parent