上次的提问无解,分也分给大家了:http://topic.csdn.net/u/20090817/05/098332b6-1535-4d25-8d09-3f01dd607430.html
感谢大家热心回答,是不是我的提问太诡异了?还是我的问题本身就有问题?-_-!这次提问的目的是:查找一个父类的所有的子类,并将子类的ID保存为数组。代码如下(数据结构就是普通的ID:PID式无限分类结构):
function listNewsSort($newsort_id)
{
$list_sql = "SELECT * FROM `{$db_table}newssort` WHERE `newssort_pid` = '$newsort_id'";
$list_result = mysql_query($list_sql) or die('数据库查询失败,请与管理员联系!');
while($list_row = mysql_fetch_assoc($list_result))
{
$arr_news_sort[] = $list_row['newssort_id']; //将子类ID保存为数组
listNewsSort($list_row['newssort_id']); //递归
}
if(这里用什么作为跳出递归的条件?)
{
return $arr_news_sort; //数组返回值
}
}//测试结果
$a = listNewsSort(1);
print_r($a);
以上代码必须有一个跳出递归的条件,才能获得正确的返回值,但是我不晓得这个条件是什么?再次感谢大家热心帮助。
感谢大家热心回答,是不是我的提问太诡异了?还是我的问题本身就有问题?-_-!这次提问的目的是:查找一个父类的所有的子类,并将子类的ID保存为数组。代码如下(数据结构就是普通的ID:PID式无限分类结构):
function listNewsSort($newsort_id)
{
$list_sql = "SELECT * FROM `{$db_table}newssort` WHERE `newssort_pid` = '$newsort_id'";
$list_result = mysql_query($list_sql) or die('数据库查询失败,请与管理员联系!');
while($list_row = mysql_fetch_assoc($list_result))
{
$arr_news_sort[] = $list_row['newssort_id']; //将子类ID保存为数组
listNewsSort($list_row['newssort_id']); //递归
}
if(这里用什么作为跳出递归的条件?)
{
return $arr_news_sort; //数组返回值
}
}//测试结果
$a = listNewsSort(1);
print_r($a);
以上代码必须有一个跳出递归的条件,才能获得正确的返回值,但是我不晓得这个条件是什么?再次感谢大家热心帮助。
解决方案 »
- php源文件编码与操作系统文件编码冲突导致中文乱码
- 这样的页面内容替换如何实现
- 有用过web client tool "SOAPSonar"的吼一声,知道这个工具怎么对输入的数据按照schema中的正则表达式来做check?
- 在线等,急50分,马上给!
- PHP中在另一页面里怎样获取写往客户端的数据?
- 如何对TEXT类型字段的分次处理
- 急!急!急!关于php4中session
- 数组的排序问题!
- 关于PHP根据IP跳转的问题,请大家帮帮忙,谢谢。
- 下载.url文件(快捷方式)问题
- 这个循环判断怎么写比较合适?
- 服务器用file_get_contents打开远程文件,是不是服务器就要消耗宽带去读取远程文件呢?
群号:62464919,本群是IT技术群,包括(C#,Java,ruby,JavaScript,asp,jsp,python,asp.net,sql,mysql……众多语言)此群需要您来共同进步,学习中放松心情。管理员在次致敬,呵呵,搞的不好了。
{
$list_sql = "SELECT * FROM `{$db_table}newssort` WHERE `newssort_pid` = '$newsort_id'";
$list_result = mysql_query($list_sql) or die('数据库查询失败,请与管理员联系!');
if( 没有数据记录为空 )
{
return 空; //数组返回值
} while($list_row = mysql_fetch_assoc($list_result))
{
$arr_news_sort[] = $list_row['newssort_id']; //将子类ID保存为数组
listNewsSort($list_row['newssort_id']); //递归
} return 记录集数组
}
数据表就是newssort_id newssort_name newssort_pid
1 一级分类 0
2 二级分类 1
3 三级分类 2(这种结构)
{
$list_sql = "SELECT * FROM `{$db_table}newssort` WHERE `newssort_pid` = '$newsort_id'";
$list_result = mysql_query($list_sql) or die('数据库查询失败,请与管理员联系!');
while($list_row = mysql_fetch_assoc($list_result))
{
$arr_news_sort[] = $list_row['newssort_id']; //将子类ID保存为数组
listNewsSort($list_row['newssort_id'], $arr_news_sort); //递归
}}
function listNewsSort($newsort_id)
{
static $arr_news_sort; //使$arr_news_sort作用范围在listNewSort函数内。
$list_sql = "SELECT * FROM `{$db_table}newssort` WHERE `newssort_pid` = '$newsort_id'";
$list_result = mysql_query($list_sql) or die('数据库查询失败,请与管理员联系!');
while($list_row = mysql_fetch_assoc($list_result))
{
$arr_news_sort[] = $list_row['newssort_id']; //将子类ID保存为数组
listNewsSort($list_row['newssort_id']); //递归
}
//if(这里用什么作为跳出递归的条件?)
//{
//不需要任何跳出递归的条件,因为递归在while循环内进行,跳出while循环就是递归结束的时候.
return $arr_news_sort; //数组返回值
//}
}//测试结果
$a = listNewsSort(1);
print_r($a);
通常情况下,树的数据一般是比较固定化的,生成一个php数组缓存或者json串存文件会好一点,修改树数据时就重新更新生成一次缓存数据,这样下次搜索树,sql操作都省了,一般树的数据都是搜索多,更新少,当然具体情况需具体分析。
我现在用的就是static,static效果和global差不多,另外我不是在做树遍历…… -_-!这样做的最终目的是点击一个分类,显示此分类下包含所有子类在内的全部文章。请问如果不把所有子类ID保存为数组要如何处理呢?
{
global $arr_news_sort;//设置成全部数组
$list_sql = "SELECT * FROM `{$db_table}newssort` WHERE `newssort_pid` = '$newsort_id'";
$list_result = mysql_query($list_sql) or die('数据库查询失败,请与管理员联系!');
while($list_row = mysql_fetch_assoc($list_result))
{
$arr_news_sort[] = $list_row['newssort_id']; //将子类ID保存为数组
listNewsSort($list_row['newssort_id']); //递归
}
}
function listNewsSort($newsort_id){
static $arr_news_sort;//使$arr_news_sort作用范围在listNewSort函数内。
$list_sql="SELECT * FROM `{$db_table}newssort` WHERE `newssort_pid` = '$newsort_id'";
$list_result=mysql_query($list_sql) ordie('数据库查询失败,请与管理员联系!');
while($list_row=mysql_fetch_assoc($list_result)){
$arr_news_sort[]=$list_row['newssort_id'];//将子类ID保存为数组
listNewsSort($list_row['newssort_id']);//递归
}
//if(这里用什么作为跳出递归的条件?)
//{
//不需要任何跳出递归的条件,因为递归在while循环内进行,跳出while循环就是递归结束的时候.
return $arr_news_sort; //数组返回值
//}
}
//测试结果
$a= listNewsSort(1);
print_r($a);