请教用文本统计点击数并按点击数排序的问题!(属于编程问题吧)
tq85 2004-04-10 11:58:20 我的思路是
count3.txt
存放数据格式为
统计id|统计的点数
没行格开!
首先将count3.txt文件读出来
在for循环中
list($cidi,$readcounti)=explode("|",$arr[$i]);
然后赋值给
$cid[$i]=$cidi;
$readcount[$i]=$readcounti;
$cid [] $readcount[] 这两个数组
然后在当前循环下判断
if $cid[$i]==$ID 则$readcount[$i]++
然后开始排序
通过比较自加后的$readcount[$i]比较这个给提前排序!
结果就在这里出问题了!
好象我这个想法就有问题!
本来是应该排好序后在for循环一次将两个数组依次写入文件的!
我添加了echo输出的代码:
<?php
echo "\$_GET['id']:".$_GET['id']."<BR>";
addcountid($_GET['id']);
function addcountid($ID){
echo "\$ID:".$ID."<BR>";
$arr=file("count3.txt");
$counter=count($arr);
echo "\$counter:".$counter."<BR>";
$fp=fopen("count3.txt","w");
flock($fp,LOCK_EX);
for($i=0;$i<$counter;$i++){
list($cidi,$readcounti)=explode("|",$arr[$i]);
$cid[$i]=$cidi;
$readcount[$i]=$readcounti;
echo "\$cid[".$i."]:".$cid[$i]."<BR>";
echo "\$readcount[".$i."]:".$readcount[$i]."<BR>";
if($cid[$i]==$ID)
{$readcount[$i]++;
echo "if(\$cid[\$i]==\$ID) <BR>";
echo "\$readcount[".$i."]:".$readcount[$i]."<BR>";
$READCOUNT=$readcount[$i];
$addmark=1;
for($j=$i;$j>=$i;$j--){
echo "\$j:".$j."<BR>";
if($READCOUNT==$readcount[$j]) {
echo "\$cid[\$j+1]:\$cid[".$j."]:".$cid[$j+1]."<BR>";
$cid[$i]=$cid[$j+1];
echo "\$cid[".$i."]:".$cid[$i]."<BR>";
echo "\$readcount[\$j+1]:\$readcount[".$j."]:".$readcount[$j+1]."<BR>";
$readcount[$i]=$readcount[$j+1];
echo "\$readcount[".$i."]:".$readcount[$i]."<BR>";
$cid[$j+1]=$ID;
echo "\$cid[\$j+1]:\$cid[".$j."]:".$cid[$j]."<BR>";
$readcount[$j+1]=$READCOUNT;
echo "\$readcount[\$j+1]:\$readcount[".$j."]:".$readcount[$j+1]."<BR>";
}
}
}
//fputs($fp,$arr[$i]."\r\n");
//else {fputs($fp,$cid."|".$readcount++."\r\n");$READCOUNT=$readcount;$addmark=1;
}
for($i=0;$i<$counter;$i++){
echo $cid[$i]."|".$readcount[$i]."<BR>";
fputs($fp,$cid[$i]."|".$readcount[$i]);
}
if($addmark!=1) {
fputs($fp,$ID."|1");
$READCOUNT=1;
}
flock($fp,LOCK_UN);
fclose($fp);
return($READCOUNT);
}
?>
一开始我是打算在for循环中
list($cidi,$readcounti)=explode("|",$arr[$i]);
后直接往文件里写写如
fputs($fp,$cidi."|".$readcounti);
如果碰到$readcouti++则将文件指针fseek几行来从中间插入新记录。
可是发现fseek是按字节offset的,而不是行数,而因为我点击数位数不定,不知道计算offset
请高手指点!我编程水平比较差……希望高手在写算法给我的时候最好能把代码写给我看看好吗?!
分不够再加……