我希望创建一个我还没有想法的递归函数
这是我从数据库中获取类别的代码
<?php
$sql = mysql_query("SELECT * FROM categories WHERE category_parent = '1' ORDER BY lft ASC");
while($row = mysql_fetch_array($sql)) {
echo "<li><a href='/{$row['category_safe_name']}/'>{$row['category_name']}</a>";
$sql2 = mysql_query("SELECT * FROM categories WHERE category_parent = '{$row['category_id']}'");
if(mysql_num_rows($sql2) > 0)
echo "<ul>";
while($row2 = mysql_fetch_array($sql2)) {
echo "<li><a href='/{$row2['category_safe_name']}/'>{$row2['category_name']}</a><li>";
}
if(mysql_num_rows($sql2) > 0)
echo "</ul>";
echo "</li>";
}
?>
目前看起来像
Top Category (category_id = 1)
Category
Sub Category
我的代码适用于类别&amp;子类别。我打算做的是让我的代码支持无限的子类别
欢迎任何帮助和建议。
谢谢
答案 0 :(得分:3)
我愿意:
<?php
function getChildren($id=1) {
$sql = mysql_query("SELECT * FROM categories WHERE category_parent = '$id' ORDER BY lft ASC");
echo "<ul>";
while($row = mysql_fetch_array($sql)) {
echo "<li><a href='/{$row['category_safe_name']}/'>{$row['category_name']}</a>";
getChildren($row['category_id']);
echo "</li>";
}
echo "</ul>";
}
getChildren();
?>
答案 1 :(得分:2)
您应该查看Managing Hierarchical Data in MySQL。
它很好地概述了在MySQL中使用分层数据的一些方法。
答案 2 :(得分:0)
您需要做的是构建一个递归函数。也就是说,一个自称在其中的函数。一个例子:
function getCategories($parent=0) {
$res = mysql_query("SELECT * FROM categories WHERE category_parent = '$id' ORDER BY left ASC");
if (mysql_num_rows($res) > 0) {
$category = mysql_fetch_object();
echo '<ul>';
echo '<li><a href="' . $category->category_safe_name . '">' . $category->category_name . '</a>';
getCategories($category->category_id);
echo '</li>';
}
}
如果我对表名和列名进行了任何拼写错误,那么显然要将它们换成正确的值。
答案 3 :(得分:-1)
这样的东西?
function getCategories($mid, $categoryParent = 1)
{
$return = '';
$results = mysql_query("SELECT * FROM categories WHERE category_parent = '$categoryParent' ORDER BY lft ASC", $mid);
while($row = mysql_fetch_array($results)) {
$return .= "<li><a href='/{$row['category_safe_name']}/'>{$row['category_name']}</a></li>";
$subs = getCategories($mid, $row['category_id']);
if (!empty($subs)) {
$return .= '<ul>';
$return .= $subs;
$return .= '<ul>';
}
}
return $return;
}
$mid = mysql_connect($host, $user, $pass);
echo getCategories($mid);
会打印出你的所有类别,当然会按照你想要的方式修复它,但这会让你知道递归函数如何工作