本 ORDER 函数专用于论坛的消息标题显示,利用本函数有几点要求,如下:
1、数组的的第一个元素为ID(如$a[$i][0])且其下标必须为0,第二个元素必须为PID(为父ID,其它同上),
第三个元素必须为RID(根ID),第四个元素必须为LID(本ID用于控制缩进)。
2、数组还必须按RID排序,即RID有序。
3、本函数不支持数组的断层,(如:$a[0],$a[1],$[3]……,其中少了$a[2],此种行为不允许)。
4、本函数是根据数组的下标为0,1来进行区分当前记录是否为根ID的,而它有一定的要求($a[$i][0]=$a[$i][1]为根ID)。
5、本函数为业余时间编写,错误在所难免,请大家纠正。


I
/I\
o-=H_+_H=-o ? [email protected]
jeewood G http://www.lbh.f2s.com

小生的签名:)
--------------Designed by jeewood.-------
----------------------------------------*/
function order_disc($array_needed_to_order){//本函数用于论坛标题显示时的排序。
$rss=$array_needed_to_order;//$array_needed_to_order数组有一定的要求,其中所有的RID必有序!即所有相同的RID必须相邻!

$counti=0;//本步取得所有的RID及其数组下标。定义如下:$r[$i][0]为数组下标;$r[$i][1]为当前的RID。
for($i=0;$i<count($rss);$i++){
if($rss[$i][0]==$rss[$i][1]){
$r[$counti][0]=$i;
$r[$counti][1]=$rss[$i][2];
$counti++;
}
}

for($counti=0;$counti<count($r);$counti++){

$flag=$r[$counti][1];
$begini=$r[$counti][0];

if($counti<count($r)-1){ //本步取得$endi。
$endi=$r[$counti+1][0];
}else{
$endi=count($rss);
}

for($suborderi=$begini;$suborderi<$endi;$suborderi++){
if(($rss[$suborderi][1]==$flag)&&($rss[$suborderi][1]!=-1)){
$temp_rss[]=$rss[$suborderi];
$flag=$rss[$suborderi][0];
$rss[$suborderi][1]=-1;
}
}
//-------------------------------- $num=count($temp_rss); //本单元当实现正在的排序!
$alli=$num-1;
while($alli>-1){
if(count($temp_rss)>$num){
$num=count($temp_rss);
$alli=$num-1;
}else{
$alli--;
}

$flag=$temp_rss[$alli][0];
for($suborderi=$begini;$suborderi<$endi;$suborderi++){//本单元用于以某一标记ID取其所有的下属ID。
if(($rss[$suborderi][1]==$flag)&&($rss[$suborderi][1]!=-1)){
$temp_rss[]=$rss[$suborderi];
$flag=$rss[$suborderi][0];
$rss[$suborderi][1]=-1;
}
}
//-------------------------- }
}
return $temp_rss;
}