Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]DirectoryIterator sortowanie wyniku
!*!
post 26.09.2009, 11:00:23
Post #1





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Tym sposobem odczytuję listę plików w katalogu, pomijając . oraz .. :
  1. $directory = 'folder';
  2.  
  3. foreach (new DirectoryIterator($directory) as $files) {
  4.  
  5. $onlydirectory = !$files -> isDot() and !$files -> isDir() and !$files -> isExecutable();
  6. $filename = $files -> getFilename();
  7. $date = $files -> getMTime();
  8. $date = date("d-m-Y H:i", $date);
  9.  
  10. $size = $files -> getSize();
  11. $sizeinkb = round($size/1024);
  12.  
  13. if($onlydirectory) {
  14.  
  15.  
  16. echo '<tr class="'. $class.'"><td class="tdf"><input type="checkbox" /></td><td class="tdf">'.imagefile($filename).'</td><td class="tdk">'.$filename.'</td><td class="tdn">'.$size.'</td><td class="tdn">'.$date.'</td><td class="tdu">edycja</td><td class="tdu">usun</td></tr>';
  17.  
  18.  
  19. }
  20.  
  21. }


Chciałbym nazwy plików posortować alfabetycznie:

  1. $directory = 'folder';
  2.  
  3. foreach (new DirectoryIterator($directory) as $files) {
  4.  
  5. $onlydirectory = !$files -> isDot() and !$files -> isDir() and !$files -> isExecutable();
  6. $filename = $files -> getFilename();
  7. $date = $files -> getMTime();
  8. $date = date("d-m-Y H:i", $date);
  9.  
  10. $size = $files -> getSize();
  11. $sizeinkb = round($size/1024);
  12.  
  13. if($onlydirectory) {
  14.  
  15.  
  16. $filetab[] = $filename;
  17.  
  18.  
  19. }
  20.  
  21. }
  22. sort($filetab);
  23.  
  24.  
  25. foreach ($filetab as $filename) {
  26. echo '<tr class="'. $class.'"><td class="tdf"><input type="checkbox" /></td><td class="tdf">'.imagefile($filename).'</td><td class="tdk">'.$filename.'</td><td class="tdn">'.$sizeinkb.'</td><td class="tdn">'.$date.'</td><td class="tdu">edycja</td><td class="tdu">usun</td></tr>';
  27.  
  28. }


Jednak nie wiem czy robię to dobrze, oraz jak odczytać w foreach inne dane?

Kod
foreach ($filetab as $filename && )


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
dr_bonzo
post 26.09.2009, 11:08:44
Post #2





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


1. Zainicjuj tabele $filetab!
2. Wrzucaj do niej

$filetab[$filename] = $files;

3. Potem ksort() - posortuje ci po kluczach tablicy, czyli po nazwach plikow

4.

  1. foreach ( $filetab as $filename => $files )
  2. {
  3.  
  4. }


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
!*!
post 26.09.2009, 21:28:21
Post #3





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Ok, zrobiłem coś takiego i posortowało:

  1. $directory = 'pliki';
  2. $filetab = array();
  3.  
  4.  
  5. foreach (new DirectoryIterator($directory) as $files) {
  6.  
  7. $onlydirectory = !$files -> isDot() and !$files -> isDir() and !$files -> isExecutable();
  8. $filename = $files -> getFilename();
  9. $date = $files -> getMTime();
  10. $date = date("d-m-Y H:i", $date);
  11.  
  12. $size = $files -> getSize();
  13. $sizeinkb = round($size/1024);
  14.  
  15. if($onlydirectory) {
  16.  
  17.  
  18.  
  19. $filetab[$filename] = $files;
  20.  
  21. }
  22.  
  23. }
  24. ksort($filetab);
  25.  
  26.  
  27. foreach ($filetab as $filename => $files) {
  28. echo '<tr class="'. $class.'"><td class="tdf"><input type="checkbox" /></td><td class="tdf">'.imagefile($filename).'</td><td class="tdk">'.$filename.'</td><td class="tdn">'.$sizeinkb.'</td><td class="tdn">'.$date.'</td><td class="tdu">edycja</td><td class="tdu">usun</td></tr>';
  29.  
  30. }


Jednak nie wiem jak mam odczytać inne wartości w:

  1. foreach ($filetab as $filename => $files) {
  2. echo '<tr class="'. $class.'"><td class="tdf"><input type="checkbox" /></td><td class="tdf">'.imagefile($filename).'</td><td class="tdk">'.$filename.'</td><td class="tdn">'.$sizeinkb.'</td><td class="tdn">'.$date.'</td><td class="tdu">edycja</td><td class="tdu">usun</td></tr>';
  3.  
  4. }


Jeśli dodam inną tablice np $
Kod
filetab[$sizeinkb] = $files;


To wynik zaczną się sortować dwa razy, pierw z nazwą a potem rozmiarem pliku.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
dr_bonzo
post 26.09.2009, 22:21:16
Post #4





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


foreach ($filetab as $filename => $files) {


zobacz co wkladales do tablicy i czym NADAL jest $files


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
!*!
post 28.09.2009, 11:26:45
Post #5





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


Im więcej czytam na necie informacji o tabelach tym bardziej nie wiem o co w tym chodzi tzn. wiem jak przypisać/wpakować coś do tablicy, ale myli mi się to z tymi zmiennymi i sposobem ich wyświetlenia.
dr_bonzo - przez print_r($files); otrzymuję wynik

Kod
Array
(
)


I nic poza tym, tak samo jest jak odwołam sie do innej zmiennej.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
dr_bonzo
post 28.09.2009, 15:06:54
Post #6





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

Ostrzeżenie: (0%)
-----


  1. <?php
  2. // brakujace zmienne
  3. $class = "NIC";
  4.  
  5.  
  6. $directory = '.';
  7. $filetab = array();
  8.  
  9.  
  10. foreach (new DirectoryIterator($directory) as $files)
  11. {
  12.  
  13. $onlydirectory = !$files -> isDot() and !$files -> isDir() and !$files -> isExecutable();
  14. $filename = $files -> getFilename();
  15. $date = $files -> getMTime();
  16. $date = date("d-m-Y H:i", $date);
  17.  
  18. $size = $files -> getSize();
  19. $sizeinkb = round($size/1024);
  20.  
  21. if($onlydirectory)
  22. {
  23. // $files jest obiektem iteratora, z kazdym wywolaniem w foreach zmienia wartosci
  24. // wewnatrz siebie, wiec nie mozna go przechowywac, nalezy skopiowac z niego nazwe, wielkosc, itp
  25. $filetab[$filename] = array( 'filename' => $files->getFileName(), 'size' => $files->getSize(), 'mtime' => $files->getMTime());
  26. }
  27.  
  28. }
  29. ksort($filetab);
  30.  
  31. foreach ($filetab as $filename => $files) {
  32. printf( "Filename: %s, Size: %.2fKB, Modified at: %s<br />", $files['filename'], $files['size']/1024, date('d-m-Y H:i', $files['mtime']));
  33. //print_r($files);
  34. }


Zapomnialem o malym szczegole zwiazanym z interatorem -> patrz komentarz.


--------------------
Nie lubię jednorożców.
Go to the top of the page
+Quote Post
--david8213--
post 24.07.2013, 05:26:17
Post #7





Goście







Co należy dodać żeby dodatkowo sortowało mi pliki po rozszerzeniu (po nazwie i rozszerzeniu)
Po nzawie jest już zrobione

  1. <?PHP
  2.  
  3. $directory = './'; // ścieżka do katalogu
  4.  
  5. $filetab = array();
  6.  
  7. $di = new DirectoryIterator($directory);
  8.  
  9. foreach ($di as $files)
  10.  
  11. {
  12.  
  13. $onlydirectory = !$files -> isDir() and !$files -> isDot() and !$files -> isExecutable(); // nie wyświetla katalogów !$files -> isDir()
  14.  
  15. $filename = $files -> getFilename();
  16.  
  17. $date = $files -> getMTime();
  18.  
  19. $date = date("d-m-Y H:i", $date);
  20.  
  21.  
  22. $size = $files -> getSize();
  23.  
  24. $sizeinkb = round($size/1024);
  25.  
  26.  
  27.  
  28. if($onlydirectory) {
  29.  
  30. $filetab[$filename] = array(
  31.  
  32. 'filename' => $files ->getFileName(),
  33.  
  34. 'size' => $files ->getSize(),
  35.  
  36. 'date' => $files ->getMTime()
  37.  
  38. );
  39.  
  40. }
  41.  
  42. }
  43.  
  44. ksort($filetab); // sortowanie według nazwy pliku
  45.  
  46.  
  47.  
  48. // Wyświetlenie plików będących w katalogu
  49.  
  50. foreach ($filetab as $filename => $files)
  51.  
  52. {
  53.  
  54. $ext = pathinfo($files['filename'], PATHINFO_EXTENSION); // Wyświetlanie zdefiniowanych plików
  55.  
  56. if (($ext=="gif") || ($ext=="jpg") || ($ext=="jpeg") || ($ext=="bmp") || ($ext=="html"))
  57.  
  58. {
  59.  
  60. echo '
  61.  
  62. <table width="1000"><tr>
  63.  
  64.  
  65.  
  66. <td bgcolor="#F5F5F5" width="400"> &nbsp; - &nbsp; <a href="'.$files['filename'].'">'.$files['filename'].'</a> </td>
  67.  
  68. <td bgcolor="#F5F5F5" width="110"><center><a> '.date('d-m-Y H:i', $files['date']).' </a></td>
  69.  
  70. <td bgcolor="#F5F5F5" width="70"><center><a> '.$files['size'].' Kb </a></td>
  71.  
  72. <td bgcolor="#F5F5F5" width="70"><center> <a href="delete.php?plik='.$files['filename'].'">usuń</a></td>
  73.  
  74. </tr></table> ';
  75.  
  76. }
  77. }
  78.  
  79.  
  80.  
  81. ?>
Go to the top of the page
+Quote Post
david8213
post 24.07.2013, 08:09:45
Post #8





Grupa: Zarejestrowani
Postów: 308
Pomógł: 0
Dołączył: 9.12.2009

Ostrzeżenie: (10%)
X----


Dlaczego mi nie działa wyświetlanie ikonek do poszczególnego rozszerzenia ?

  1. //
  2. $display['tif'] = "img/tif.bmp";
  3. $display['bmp'] = "img/bmp.bmp";
  4.  
  5. //
  6.  
  7. global $display, $showsize;
  8.  
  9. //
  10.  
  11. echo '.$display[get_extension($files)].';
  12.  


Jak to zrobić na podstawie powyższych postów

Ten post edytował david8213 24.07.2013, 08:34:49
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 25.05.2024 - 17:41