更新了一个确切的工作示例。
您的主题是我也在努力解决的问题。它有一个与 mysql 或 mysqli 相关的标题“多维数组”。
第 1 步:数据库 ..
CREATE TABLE `tbl_categories` (
`id` int(11) NOT NULL,
`name` varchar(100) COLLATE utf8_bin NOT NULL DEFAULT '0',
`parent_id` int(11) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
INSERT INTO `tbl_categories` (`id`, `name`, `parent_id`) VALUES
(1, 'element1', 0),
(2, 'element2', 1),
(3, 'element3', 2),
(4, 'element4', 3);
如您所见,您只需在项目中更改 parent_id 即可更改层次结构。
第 2 步:
遍历条目的函数...
function categoryParentChildTree($parent = 0, $category_tree_array = '') {
global $dbConnection;
$parent = $dbConnection->real_escape_string($parent);
if (!is_array($category_tree_array)) //###
$category_tree_array = array();
$sqlCategory = "SELECT id,name,parent_id FROM tbl_categories WHERE parent_id = $parent ORDER BY id ASC";
$resCategory=$dbConnection->query($sqlCategory);
if ($resCategory->num_rows > 0) {
while($rowCategories = $resCategory->fetch_assoc()) {
$category_tree_array[] = array("id" => "<div id='".$rowCategories['id']."'", "name" => " data-name='".$rowCategories['name']."'>{$rowCategories['name']}");
$category_tree_array = categoryParentChildTree($rowCategories['id'], $category_tree_array);
}
}
return $category_tree_array;
}
第三步:使用函数
$categoryList = categoryParentChildTree();
foreach($categoryList as $key => $value){
echo $value['id']." ".$value['name'];
}
这里非常重要的一行是我用### 标记的那一行。参数用于检查传递的变量是否为数组。如果不是,则函数继续。如果它是一个数组,该函数会在同一个变量上调用自身以将其展平并将其转换为进程中的变量。
整个事情的输出如下:
<html>
<head>
</head>
<body>
<div id="1" data-name="element1">element1
<div id="2" data-name="element2">element2
<div id="3" data-name="element3">element3
<div id="4" data-name="element4">element4
</div>
</div>
</div>
</div>
</body>
</html>
理论上,这涉及无限级别的嵌套和项目。希望对你有帮助。
这是基于 Saurabh Kumar Singh 的教程。您可以从以下链接查看功能齐全的原始演示和可下载的 zip:
http://demo.stepblogging.com/category-tree/
最后,如果这能满足您的需求,请不要忘记接受答案。