Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sortowanie zawartośći pliku...
Forum PHP.pl > Forum > PHP
serek_x
Witam serdecznie. Mam problem z posortowanie pliku, z którego wczytywane byłyby komentarze, według dat od najświeższej.
  1. <?php
  2. $id=fopen($nazwa,"r");
  3. while(!feof($id))
  4.        {
  5. $linia=fgets($id);
  6.      if($linia!="")
  7.          {      
  8.                    list($date, $log, $kom)=split('|',$linia);
  9.             echo"<table width='600' FRAME=below><tr><td width='15' align=right>W dniu:</td><td> $date</td></tr><tr><td   align=right>użytkownik:</td> <td>$log</td></tr><tr><td align=right>napisał:</td><td>$kom</td></tr></table>";
  10.                    }
  11.    }
  12.                  $t=file($nazwa);
  13.              krsort($t);      
  14. fclose($id);
  15. }
  16. ?>

wiem, że źródło nie wygląda ciekawie, tymniemniej będę wdzięczny za jakąkolwiek pomoc...
Fifi209
Najlepiej użyć bazy danych ;p Potem tylko
  1. ORDER BY
serek_x
Witam serdecznie. Mam problem z posortowanie pliku, z którego wczytywane byłyby komentarze, według dat od najświeższej.
  1. <?php
  2. $id=fopen($nazwa,"r");
  3. while(!feof($id))
  4.        {
  5. $linia=fgets($id);
  6.      if($linia!="")
  7.          {      
  8.                    list($date, $log, $kom)=split('|',$linia);
  9.             echo"<table width='600' FRAME=below><tr><td width='15' align=right>W dniu:</td><td> $date</td></tr><tr><td   align=right>użytkownik:</td> <td>$log</td></tr><tr><td align=right>napisał:</td><td>$kom</td></tr></table>";
  10.                    }
  11.    }
  12.                  $t=file($nazwa);
  13.              krsort($t);      
  14. fclose($id);
  15. }
  16. ?>

wiem, że źródło nie wygląda ciekawie, tymniemniej będę wdzięczny za jakąkolwiek pomoc...
serek_x
A bez użycia bazy danych jakoś by się nie dało? Czy ten mój krsort jest w ogóle w dobrym miejscu, że nie działa?
piotrooo89
a możesz pokazać jak masz zapisywane dane w tym pliku?
serek_x
  1. <?php
  2. $linia=date("y:m:d g:i")."|".$login."|".$tresc."|\n";
  3. fputs($id,$linia);
  4. ?>

$login i $tresc wprowadzamy za pomocą formularza...
piotrooo89
krsort sortuje po kluczu malejąco.

zrobiłem test.

dane.txt
Kod
09:03:30 11:21|pppp|asd
08:02:12 09:11|dsa|jkh
09:02:20 20:21|pasdppp|vz
09:03:29 22:01|ppqwerpp|qwexcv


index.php
  1. <?php
  2. $plik = file('dane.txt');
  3.  
  4. krsort($plik);
  5.  
  6. foreach($plik as $w => $a)
  7. {
  8.    echo $w.' '.$a.'<br>';
  9. }
  10. ?>


i sortuje.
robar12
Ten kod przetestowałem u siebi i działa . Znalazłem w Twoim kodzie zbędny nawias "}?>" na końcu.
<?php
$id=fopen("ts.txt","r");
while(!feof($id))
{
$linia=fgets($id);
if($linia!="")
{
list($date, $log, $kom)=split('\|',$linia);
echo"<table width='600' FRAME=below><tr><td width='15' align=right>W dniu:</td><td> $date</td></tr><tr><td align=right>użytkownik:</td> <td>$log</td></tr><tr><td align=right>napisał:</td><td>$kom</td></tr></table>";
}
}
$t=file("ts.txt");
krsort(&$t, SORT_NUMERIC);
fclose($id);
print('<pre>');
print_r($t);
print('</pre>');
?>
Manual - krsort
serek_x
Hm, faktycznie sortuje. Ale gdybym chciał by wyświetlało mi owe informacje tak jak te informacje zawarte w echo
  1. <?php
  2. echo"<table width='600' FRAME=below><tr><td width='15' align=right>W dniu:</td><td> $date</td></tr><tr><td   align=right>użytkownik:</td> <td>$log</td></tr><tr><td align=right>napisał:</td><td>$kom</td></tr></table>";
  3. ?>

bo te informacje wyświetla mi nadal w odwrotnej kolejność...

-------------
Eh, zrobiły się przez przypadek dwa tematy:/
robar12
array_reverse ustawia tablicę w porządku odwrotnym .
Manual - array_reverse
serek_x
Faktycznie sortuje, ale czemu po splitowaniu każdej lini i wrzuceniu po kolei do tabeli by wyglądało to mniej więcej tak:

"
W dniu: 2009:03:29 17:36
użytkownik: ers
napisał: gi
_______________________________

W dniu: 2009:03:29 17:36
użytkownik: ers
napisał: gi
"

nie jest to posortowane?

może wrzucę cały program....
  1. <p>Program dopisuje do pliku podane przez formularz:<br>
  2. komentarz, nick gościa oraz datę i godzinę wpisu<br>
  3. Następnie wypisuje na ekran wszystkie wpisy od najnowszego do najstarszego </p>
  4. </center>
  5. <?php
  6.  
  7. echo"<p><form method='post' action='index.php'><table border=1></p>";
  8. echo"<p><tr><td width='250'>Login: </td> <td><input name='login' size='35' ></td></tr></p>";
  9. echo"<p><tr><td>Twój komentarz:  </td> <td><textarea name='tresc' cols='35' rows='5' ></textarea> </td></tr></p>";
  10. echo"<p><tr><td> </td> <td><input type='submit' name='submit' value='Dodaj komentarz'> </td></tr></table></p></form>";
  11.  
  12. $login=$_POST['login'];
  13. $pom=$_POST['tresc'];
  14.  
  15. if ($login<>NULL || $pom<>NULL){
  16. $nazwa="plik.txt";
  17. $id=fopen($nazwa,"a") or die ("problemy z otwarciem pliku");
  18. $tresc=preg_replace("/[\n]+/","",$pom);
  19. $tresc=trim($tresc);
  20. $linia=date("Y:m:d G:i")."|".$login."|".$tresc."|"."\n";
  21. fputs($id,$linia);
  22. fclose($id);
  23.  
  24. $id=fopen($nazwa,"r");
  25. while(!feof($id))
  26.    {
  27.    $linia=fgets($id);
  28.    if($linia!="") {      
  29. list($date, $log, $kom)=split('[|\n]',$linia);
  30. $t=file("$nazwa");
  31. krsort($t, SORT_NUMERIC);
  32. echo"<table width='700'><tr><td width='15' align=right>W dniu:</td><td> $date</td></tr><tr><td align=right>użytkownik:</td> <td>$log</td></tr><tr><td align=right>napisał:</td><td>$kom</td></tr><tr><td></td><td><hr></td></tr></table>";
  33.                    }
  34.        }
  35.          
  36.         fclose($id);
  37.            }
  38. ?>
robar12
<p>Program dopisuje do pliku podane przez formularz:<br>
komentarz, nick gościa oraz datę i godzinę wpisu<br>
Następnie wypisuje na ekran wszystkie wpisy od najnowszego do najstarszego </p>
<?php

echo"<p><form method='post' action='index.php'><table border=1></p>";
echo"<p><tr><td width='250'>Login: </td> <td><input name='login' size='35' ></td></tr></p>";
echo"<p><tr><td>Twój komentarz: </td> <td><textarea name='tresc' cols='35' rows='5' ></textarea> </td></tr></p>";
echo"<p><tr><td> </td> <td><input type='submit' name='submit' value='Dodaj komentarz'> </td></tr></table></p></form>";

$login=$_POST['login'];
$pom=$_POST['tresc'];

if (!empty($login) || !empty($pom)){
$nazwa="plik.txt";
$id=fopen($nazwa,"a") or die ("problemy z otwarciem pliku");
$tresc=preg_replace("/[\n]+/","",$pom);
$tresc=trim($tresc);
$linia=date("Y:m:d G:i")."|".$login."|".$tresc."|\n";
fputs($id,$linia);
fclose($id);
//Koniec zapisu . Wczytujemy tablice. Tablice są świetne smile.gif
$t = file($nazwa);
//Wyświetlenie danych pomocnych , czyli tablicy zawierającej
//wszystkie wpisy , ale w kolejności od najstarszego do naj młodszego -
//bo tak zostały wpisywane.
echo '<pre>';
print_r($t) ;
echo '</pre>';
//Wiec trzeba ją odwrócić (tablicę)
$t = array_reverse($t);
//Zapętlamy i wypiszemy wszystkie wpisy od najnowszego do najstarszego
// count($t) razy.
for($i=0;$i<count($t);$i++){
//Wyłuskanie poszczególnych składowych każdego komentarza
$r = explode("|", $t[$i]);
//Pomocne dane
echo '<pre>';
print_r($r) ;
echo '</pre>';

$date = $r[0];//data to pierwszy element po rozbiciu na częci między '|'
$log = $r[1];//data to drugi element po rozbiciu na częci między '|'
$kom = $r[2];//kom to trzeci element po rozbiciu na częci między '|'
//No i na ekran
echo"<table width='700'><tr><td width='15' align=right>W dniu:</td><td> $date</td></tr><tr><td align=right>użytkownik:</td> <td>$log</td></tr><tr><td align=right>napisał:</td><td>$kom</td></tr><tr><td></td><td><hr></td></tr></table>";

}



/*
$id=fopen($nazwa,"r");
while(!feof($id))
{
$linia=fgets($id);
if($linia!="") {
list($date, $log, $kom)=split('[|\n]',$linia);
$t=file($nazwa);
krsort($t, SORT_NUMERIC);
echo"<table width='700'><tr><td width='15' align=right>W dniu:</td><td> $date</td></tr><tr><td align=right>użytkownik:</td> <td>$log</td></tr><tr><td align=right>napisał:</td><td>$kom</td></tr><tr><td></td><td><hr></td></tr></table>";
}
}

fclose($id);
*/
}
?>
shpaque
to ja odkopię temat, bo mam zapis w pliku bardzo podobny, bo:

  1. <?
  2. $database = './../db/actuals.db';
  3.  
  4. if (!file_exists($database))
  5. {
  6. echo 'Baza danych nie odnaleziona!';
  7. }
  8.  
  9. $id = isset($_REQUEST['id']) ? $_REQUEST['id'] : '';
  10. $action = isset($_REQUEST['action']) ? $_REQUEST['action'] : '';
  11. $input = array('\"', '<div>', '</div>');
  12. $datas = array();
  13. $zdjecies = array();
  14. $tytuls = array();
  15. $artykuls = array();
  16. $count = 0;
  17. $kodindex = -1;
  18.  
  19. $items = file($database);
  20. foreach($items as $line)
  21. {
  22. list($data, $zdjecie, $tytul, $artykul) = explode('|', trim($line));
  23. $datas[$count] = $data;
  24. $zdjecies[$count] = $zdjecie;
  25. $tytuls[$count] = $tytul;
  26. $artykuls[$count] = $artykul;
  27. if ($id == $tytul)
  28. {
  29. $kodindex = $count;
  30. }
  31. $count++;
  32. }
  33.  
  34. if (!empty($action))
  35. {
  36. if ($action == 'delete')
  37. {
  38. if ($kodindex == -1)
  39. {
  40. echo 'Nie odnaleziono wpisu!';
  41. }
  42.  
  43. $file = fopen($database, 'w');
  44. for ($i=0; $i < $count; $i++)
  45. {
  46. if ($i != $kodindex)
  47. {
  48. fwrite($file, $datas[$i]);
  49. fwrite($file, '|');
  50. fwrite($file, $zdjecies[$i]);
  51. fwrite($file, '|');
  52. fwrite($file, $tytuls[$i]);
  53. fwrite($file, '|');
  54. fwrite($file, str_replace($input, '', $artykuls[$i]));
  55. fwrite($file, "\r\n");
  56. }
  57. }
  58. fclose($file);
  59. header('Location: '.basename(__FILE__));
  60. }
  61. else
  62. if ($action == 'update')
  63. {
  64. $file = fopen($database, 'w');
  65. for ($i=0; $i < $count; $i++)
  66. {
  67. if ($i == $kodindex)
  68. {
  69. $datas[$i] = $_POST['data'];
  70. $zdjecies[$i] = $_POST['zdjecie'];
  71. $tytuls[$i] = $_POST['tytul'];
  72. $artykuls[$i] = $_POST['artykul'];
  73. }
  74. fwrite($file, $datas[$i]);
  75. fwrite($file, '|');
  76. fwrite($file, $zdjecies[$i]);
  77. fwrite($file, '|');
  78. fwrite($file, $tytuls[$i]);
  79. fwrite($file, '|');
  80. fwrite($file, str_replace($input, '', $artykuls[$i]));
  81. fwrite($file, "\r\n");
  82. }
  83. fclose($file);
  84. header('Location: '.basename(__FILE__));
  85. }
  86. else
  87. if ($action == 'create')
  88. {
  89. for ($i=0; $i < $count; $i++)
  90.  
  91. $file = fopen($database, 'a');
  92. fwrite($file, $_POST['data']);
  93. fwrite($file, '|');
  94. fwrite($file, $_POST['zdjecie']);
  95. fwrite($file, '|');
  96. fwrite($file, $_POST['tytul']);
  97. fwrite($file, '|');
  98. fwrite($file, str_replace($input, '', $_POST['artykul']));
  99. fwrite($file, "\r\n");
  100. fclose($file);
  101. header('Location: '.basename(__FILE__));
  102. }
  103. }
  104. ?>


...więc jak wiadomo nowy wpis ląduje na końcu pliku - i niech tak zostanie! Chciałbym jedynie żeby WYŚWIETLANE były wpisy odwrotnie (sama ich edycja lub dodanie niech fizycznie wpisuje "nowe - linijkę niżej"). Czyli po polsku smile.gif Plik niech się zapisuje tak jak jest, czyli im nowszy wpis - tym niżej, a niech wyświetla się odwrotnie - czy tak robi właśnie array_reverse? czy zmienia całą wartość pliku i nie daj Boże odwróci ją i nadpisze..?

WYŚWIETLANIE:
  1. for ($i=0; $i < $count; $i++)
  2. {
  3. echo "<tr>\n";
  4. echo "<td>" . $datas[$i] . "</td>\n";
  5. echo "<td><a href=./../db/aktualnosci/" . $zdjecies[$i] . " rel='fancy' title='".$tytuls[$i]."'><img src=./../db/aktualnosci/" . $zdjecies[$i] . " height = '50 px' border='0 px' title='Zobacz większe zdjęcie'></a></td>\n";
  6. echo "<td>" . $tytuls[$i] . "</td>\n";
  7. echo "<td>\n";
  8. echo " <a href=\"" . basename(__FILE__) . "?action=edit&id=" . $tytuls[$i] . "\" class='foot'>Edytuj</a> | \n";
  9. echo " <a href=\"" . basename(__FILE__) . "?action=delete&id=" . $tytuls[$i] . "\" class='foot'>Usuń</a>\n";
  10. echo "</td>\n";
  11. echo "</tr>\n";
  12. }
  13. echo "</table>\n";


już mam - wystarczyło zrobić tak:
  1. for ($i = $count - 1; $i >= 0; $i--)
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.