【发布时间】:2011-12-08 13:07:38
【问题描述】:
我正在尝试编写一个层次检测脚本,我已经编写了脚本,但只能下降 4 个级别。有没有办法将它浓缩为几行,可以处理无限数量的关卡?
这个脚本基本上是一样的代码复制粘贴4次
<?php
function listCategories($name, $disable_status = 0, $show_nums = 0) {
echo "<select name='".$name."'>";
$result = mysql_query("SELECT * FROM categories") or die(mysql_error());
while($row = mysql_fetch_array($result)) {
if($row['parent_id']==0) {
$result2 = mysql_query("SELECT * FROM categories WHERE parent_id=".$row['id']) or die(mysql_error());
echo "<option value='".$row['id']."'";
if($disable_status==1&&isParent($row['id'])){
echo " disabled='disabled'";
}
echo ">".$row['name']."</option>";
while($row2 = mysql_fetch_array($result2)) {
$result3 = mysql_query("SELECT * FROM categories WHERE parent_id=".$row2['id']) or die(mysql_error());
echo "<option value='".$row2['id']."'";
if($disable_status==1&&isParent($row2['id'])){
echo " disabled='disabled'";
}
echo ">- ".$row2['name']."</option>";
while($row3 = mysql_fetch_array($result3)) {
$result4 = mysql_query("SELECT * FROM categories WHERE parent_id=".$row3['id']) or die(mysql_error());
echo "<option value='".$row3['id']."'";
if($disable_status==1&&isParent($row3['id'])){
echo " disabled='disabled'";
}
echo ">-- ".$row3['name']."</option>";
while($row4 = mysql_fetch_array($result4)) {
echo "<option value='".$row4['id']."'>[".$row4['id']."] --- ".$row4['name']."</option>";
}
}
}
}
}
echo "</select>";
}
function isParent($cat_ID) {
$result = mysql_query("SELECT * FROM categories WHERE parent_id=".$cat_ID) or die(mysql_error());
if(mysql_num_rows($result)==0) {
return FALSE;
} else {
return TRUE;
}
}
categories 我的表结构是
id, name, parent_id
如果类别没有父类别,则parent_id 将是0,否则,它将是其父类别的id。
感谢所有帮助。
【问题讨论】:
-
你可以使用递归来解决这个问题。我现在没有时间进一步详细说明 - 希望其他人很快就会:)