【发布时间】:2011-11-22 01:30:16
【问题描述】:
我的php函数
function generateMenu($parent, $level, $menu, $utype) {
global $db;
$tree = array();
$stmt = $db->prepare("select id, parent, name FROM navigation WHERE menu=? AND user_type=?") or die($db->error);
$stmt->bind_param("ii", $menu, $utype) or die($stmt->error);
$stmt->execute() or die($stmt->error);
$stmt->store_result();
$meta = $stmt->result_metadata();
$stmt->bind_result($id, $parent, $name);
while ($stmt->fetch()) {
$arr[$id] = array(
'name' => $name,
'parent' => $parent
);
if (!array_key_exists($parent,$arr) and $parent != 0) {
$arr[$parent][$id] = $id;
}
}
$stmt->close();
}
从 db 表中生成以下数组。 [1], [2] ... - 是 li 项目的 ID
Array (
[1] => Array (
[name] => Parent1
[parent] => 0
)
[2] => Array (
[name] => Parent2
[parent] => 0
)
[3] => Array (
[name] => Parent3
[parent] => 0
)
[4] => Array (
[name] => Child1 of P1
[parent] => 1
)
[5] => Array (
[name] => Child2 of P1
[parent] => 1
)
)
我想做的是创建这样的菜单
<ul>
<li><a href="?page=1">Parent1</a>
<ul>
<li><a href="?page=4">Child1 of P1</a></li>
...
第二个函数用于从这个数组生成菜单。但我知道,在将此数组发送到第二个函数之前,我需要将其转换为多维树数组。我不知道该怎么做。
这是第二个功能
function olLiTree($tree) {
$out = '<ul>';
foreach($tree as $key => $value) {
$out.= '<li>';
if (is_array($value)) {
$out.= $key . olLiTree($value);
} else {
$out.= $value;
}
$out.= '</li>';
}
$out.= '</ul>';
return $out;
}
数据库结构
【问题讨论】:
-
PHP function issue 的可能重复项
-
顺便说一句,我会选择第一个答案,使用递归和两个单独的函数,一个用于生成多维数组(总是有用的),一个用于生成您的 html。跨度>
标签: php mysql arrays tree hierarchical-data