我的 codeigniter 项目中有两个数据库表。作为简化摘要,
page page_lang
------------------------------------- ----------------------------
id_page | id_menu | id_parent | level id_page | title | etc..
------------------------------------- ----------------------------
1 | 1 | 0 | 0 1 | Name 1 | etc..
2 | 1 | 1 | 1 2 | Name 1.1 | etc..
3 | 1 | 2 | 2 3 | Name 1.1.1 | etc..
4 | 1 | 2 | 1 4 | Name 1.2 | etc.
我正在尝试创建一个下拉选择框,其中包含嵌套有缩进的所有页面作为输出;
<option value="id_page">Name 1</option>
<option value="id_page"> » Name 1.1</option>
<option value="id_page"> - Name 1.1.1</option>
<option value="id_page"> » Name 1.2</option>
在这种情况下,我想需要加入 page 和 page_lang 并创建一个递归循环。
但我致力于设计最快的代码。感谢您的帮助。
最佳答案
你的递归函数看起来像这样
function recursivePageOptions( $level, $nodes ) {
$set = array();
foreach ($nodes as $node) {
$nest = '';
for($x=1; $x<=$level; $x++)
$nest.= ' ';
$page = '<option value="'.$node['page']['id'].'">';
$page.= $nest . $node['page']['title'] . '</option>';
$set[] = $page;
if (isset($node['children'])) {
$set = array_merge(
$set,
recursivePageOptions( $level+1, $node['children'] );
);
}
}
return $set;
}
因此,在调用此递归函数之前,您需要做的是将您的页面信息放入如下所示的数组结构中:
[
'My Homepage' => [
'page' => ['My Homepage', 24, ... ],
'children' => [
'Level 1 Page' => [
'page' => ['Level 1 Page', 39, ... ],
'children' => [
'Level 2 Page' => [
'page' = ['Level 2 Page', 51, ... ]
]
]
],
'Another Level 1 Page' =< [
'page' => ['Another Level 1 Page', 56, ... ]
]
]
]
]
这部分的细节由您来决定,本质上您将从数据库中获取行并以生成上述数组结构的方式循环遍历它们。
关于php - 在 Codeigniter、MysQL 中使用嵌套查询和 JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9410982/