Здравей!
Бях писал нещо подобно преди време, а на мен пък ми бяха помогнали със страницирането с масив, затова бързо мога да ти дам кода:
<?
$filelocation="/home/www/probna.awardspace.com/demo8/abc.txt";
$fm=file("$filelocation");
$broinastranica = 3;
$pageNum = 1;
if(isset($_GET['page']))
{
$pageNum =$_GET['page'];
$start = ($pageNum - 1) * $broinastranica;
}
else
{
$start=0;
}
$kolko=count ($fm);
for ($i=0; $i<$kolko; $i++)
{
$pm=explode ("|",$fm[$i] );
$r=$pm[1];
$r2=intval($r);
$finalen_1[$i]=$r2;
$finalen_2[$r2]=$pm[0];
}
rsort($finalen_1);
for($i = $start; $i < ($start+$broinastranica); $i++){
$red=$finalen_1[$i];
echo "<BR>$finalen_1[$i] - $finalen_2[$red]";
if ($i==$kolko) break;
}
$maxPage = ceil($kolko/$broinastranica);
$self = $_SERVER['PHP_SELF'];
$nomeranastranici = '';
for($page = 1; $page <= $maxPage; $page++)
{
if ($page == $pageNum)
{
$nomeranastranici .= " [$page] ";
}
else
{
$nomeranastranici .= " <a href=\"$self?page=$page\" >$page</a> ";
}
}
if ($pageNum > 1)
{
$page = $pageNum - 1;
$predishna = " <a href=\"$self?page=$page\" TITLE=\"Назад\"> <<</a> ";
$parva = " <a href=\"$self?page=1\">ПЪРВА</a> ";
}
else
{
$predishna = ' ';
$parva = ' ';
}
if ($pageNum < $maxPage)
{
$page = $pageNum + 1;
$sledvashta = " <a href=\"$self?page=$page\" TITLE=\"Напред\"> >></a> ";
$posledna = " <a href=\"$self?page=$maxPage\" >ПОСЛЕДНА</a> ";
}
else
{
$sledvashta = ' ';
$posledna = ' ';
}
echo $parva . $predishna . $nomeranastranici . $sledvashta . $posledna;
?>
Ето и демо:
http://probna.awardspace.com/demo8/list.php
Бтроя на резултатите промени от $broinastranica.
Има нещо, което е добре да имаш предвид с това странициране (писал съм, какви ли не вариации по него, но когато го сравня със странициране на резултати от БД недостатъците му лъсват веднага):
Файлът се чете при всяка страница отначало, промяната е само в позицията от която се обхожда получения масив. Това значи, че колкото по-голям е файла, толкова по-бавно ще се изпълнява кода.
В твоя случай има още едно утежнение - не само че четем файла всеки път, но имаме и пълно обхождане и делене на основния масив преди сортирането и това няма как да се избегне защото резултатите ти са неподредени и още на първа страница може да се наложи листване на име, което се намира на последния ред във файла.
Другото, което би могло да доведе до неточност (и без страницирането) е повторение на някое от числата според което се определя подреждането.
Проблема е в алгоритъма - сортираме само единия масив и го ползваме за ключ към втория. Тук първоначалното хрумване с асоциативния масив беше по-удачно.
Ако кажеш за какво ще използваш кода и как правиш записите във файла, може би бих могъл да измисля по-удачно решение съобразено с целия процес, а и другите навярно биха се включили с идеи, защото от постовете ти виждам, че няколко души тук пишем код на парче, което понякога може да бъде доста изнервящо...
Позволявам си всичките тези дълги обяснения не за да те назидвам, а за да те откажа от файловете. Не става, не е начина - повярвай ми!
Проблема с БД е психологически - не го твърдя само аз.
Бях фанатик на тема файлове, но операциите с тях изкривяват мисленето и свикнеш ли, дълго време ще си склонен да търсиш ненужно сложни решения, когато всичко необходимо ти е порядочно подредено в БД...
Сигурен съм, че ти се иска да правиш функционални страници, които да работят добре независимо от натоварването и сложността. С БД процеса става по-удобен, нищо повече...
Ти си решаваш... За файлове, стига да мога, ще помагам...
Успех!