Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Funkcja
xokisx
post 28.07.2008, 12:02:52
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 28.07.2008

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


Znalazłem w necie skrypt który wyświetla listy plików z określonego katalogu, oto ten skrypt:
Kod
<?php
  $i = 0;
  $images['file'] = "<img src=\"img/doc.gif\"> ";
  $images['dir'] = "<img align=\"center\" src=\"img/folder.gif\"> ";

  function show_dir($directory)
  {
      global $i, $images;

      $dir = opendir($directory);
      while ( $file = readdir($dir) )
      {
          if ( $file != "." && $file != ".." )
          {
              if ( is_dir($directory."/".$file) )
              {
                  echo ( str_repeat("&nbsp;", $i * 2) . $images['dir'] .  $file . "<br />" );
                  ++$i;
                  show_dir($directory . "/" . $file);
              }
              else
              {
                  echo ( str_repeat("&nbsp;", $i * 3) . $images['file'] . $file . "<br />" );
              }
          }
      }
      closedir($dir);
      --$i;
  }
  show_dir("./../../");
?>

Mógłby mi ktoś przerobić ten skrypt tak aby nie był w postaci funkcji a normalnego kodu ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 15)
mike
post 28.07.2008, 12:09:10
Post #2





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Nie da się ponieważ potrzeba wykorzystać rekurencję, której nie osiągniesz bez zamyania częci kodu w funkcję.
Go to the top of the page
+Quote Post
xokisx
post 28.07.2008, 12:10:15
Post #3





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 28.07.2008

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


A jak można by przerobić ten kod aby dał podobny efekt i nie był funkcją ?
Go to the top of the page
+Quote Post
mike
post 28.07.2008, 12:11:47
Post #4





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


A dlaczego nie chcesz funkcji? Przeciez to taka sama konstrukcja języka jak inne.
Prośba nie ma sensu, równie dobrze mógłbyś prosić o przerobienie bez wykorzystywania pętli.\
Funkcje to też "normalny" kod.
Go to the top of the page
+Quote Post
1010
post 28.07.2008, 12:11:58
Post #5





Grupa: Zarejestrowani
Postów: 749
Pomógł: 37
Dołączył: 3.10.2006

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


Ale nie rozumiem dlaczego to nie może być funkcja? Czy tak nie jest wygodniej?

@mike gdzie Ty tam widzisz rekurencje?

Ten post edytował 1010 28.07.2008, 12:12:37


--------------------
Go to the top of the page
+Quote Post
pyro
post 28.07.2008, 12:14:30
Post #6





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

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


Cytat(1010 @ 28.07.2008, 13:11:58 ) *
Ale nie rozumiem dlaczego to nie może być funkcja? Czy tak nie jest wygodniej?

@mike gdzie Ty tam widzisz rekurencje?


a tutaj slepaku

  1. <?php
  2. show_dir($directory . "/" . $file);
  3. ?>


// Wyrażaj się.
// ~webdicepl


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
1010
post 28.07.2008, 12:15:49
Post #7





Grupa: Zarejestrowani
Postów: 749
Pomógł: 37
Dołączył: 3.10.2006

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


Rzeczywiście pyro smile.gif przegapiłem biggrin.gif Wybaczcie...


--------------------
Go to the top of the page
+Quote Post
kampio
post 28.07.2008, 12:16:44
Post #8





Grupa: Zarejestrowani
Postów: 15
Pomógł: 1
Dołączył: 22.07.2008

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


show_dir($directory . "/" . $file); to jest odwołanie do rekurencji biggrin.gif
Go to the top of the page
+Quote Post
mike
post 28.07.2008, 12:43:27
Post #9





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


  1. <?php
  2.  
  3. $dirImg = '<img src="dir.gif" />';
  4. $docImg = '<img src="doc.gif" />';
  5.  
  6. $dirIterator = new RecursiveDirectoryIterator('.');
  7. $iterator = new RecursiveIteratorIterator($dirIterator, RecursiveIteratorIterator::SELF_FIRST);
  8. foreach ($iterator as $item) {
  9. /* @var $item SplFileInfo */
  10. if (!$iterator->isDot()) {
  11. echo str_repeat(' - ', $iterator->getDepth());
  12. if ($item->isDir()) {
  13. echo $dirImg;
  14. } else {
  15. echo $docImg;
  16. }
  17. echo $item->getFilename() . '<br />';
  18. }
  19. }
  20.  
  21. ?>


Masz bez funkcji, tylko nie narzekaj że z klasami tongue.gif bo innej możliwości nie ma.
Go to the top of the page
+Quote Post
zimi
post 28.07.2008, 18:03:52
Post #10





Grupa: Zarejestrowani
Postów: 233
Pomógł: 9
Dołączył: 3.06.2007

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


Cytat
Nie da się ponieważ potrzeba wykorzystać rekurencję, której nie osiągniesz bez zamyania częci kodu w funkcję.

a o derekursywacji nikt nie słyszał?O.o

Ten post edytował zimi 28.07.2008, 18:04:14
Go to the top of the page
+Quote Post
mike
post 28.07.2008, 18:11:32
Post #11





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


~zimi słyszał, słyszał. W o ograniczeniach PHP słyszałeś? Piwo masz ode mnie jak zaimplementujesz to bez rekurencji w PHP.
Go to the top of the page
+Quote Post
Kicok
post 28.07.2008, 19:50:27
Post #12





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


Cytat("mike")
~zimi słyszał, słyszał. W o ograniczeniach PHP słyszałeś?


A można wiedzieć o jakie ograniczenia chodzi? Zaciekawiło mnie to. Do tego stopnia, że postanowiłem napisać listowanie zawartości katalogu iteracyjnie i o dziwo się udało


--------------------
"Sumienie mam czyste, bo nieużywane."
Go to the top of the page
+Quote Post
mike
post 28.07.2008, 20:05:31
Post #13





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


Cytat(Kicok @ 28.07.2008, 20:50:27 ) *
A można wiedzieć o jakie ograniczenia chodzi? Zaciekawiło mnie to. Do tego stopnia, że postanowiłem napisać listowanie zawartości katalogu iteracyjnie i o dziwo się udało
Pochwal się.
Go to the top of the page
+Quote Post
zimi
post 28.07.2008, 20:07:34
Post #14





Grupa: Zarejestrowani
Postów: 233
Pomógł: 9
Dołączył: 3.06.2007

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


lol, @Kicok odczep się biggrin.gif:P moje piwo smile.gif
  1. <?php
  2. function pisaneDlaPiwa($sciezka)
  3. {
  4. $poziom = -1;
  5. $poziom++;
  6. $sciezki[$poziom] = $sciezka;
  7. $zaglebienie[$poziom] = opendir($sciezki[$poziom]);
  8. while($poziom >= 0)
  9. {
  10. while($plik = readdir($zaglebienie[$poziom]))
  11. {
  12. if(!in_array($plik, array('.','..')))
  13. {
  14. echo str_repeat('&nbsp;', $poziom*4).$plik.'<br>';
  15. $nowaSciezka = $sciezki[$poziom].'/'.$plik;
  16. if(is_dir($nowaSciezka))
  17. {
  18. $poziom++;
  19. $sciezki[$poziom] = $nowaSciezka;
  20. $zaglebienie[$poziom] = opendir($sciezki[$poziom]);
  21. }
  22. }
  23. }
  24. $poziom--;
  25. }
  26. }
  27. pisaneDlaPiwa('.');
  28. ?>


@mike jak już powiesz co to za ograniczenia O.o
to wpadnij z browcem na bulwar w Gdyni biggrin.gif:P

edit: jak się napiszę na kilka sposobów będzie cała skrzynka?biggrin.gif:P

Ten post edytował zimi 28.07.2008, 20:08:24
Go to the top of the page
+Quote Post
mike
post 28.07.2008, 20:12:17
Post #15





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

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


~zimi jak napiszesz bez rekurencji coś co przegląda cały folder zagnieżdżając się w dół, czyli zawartość folderów się w nim znajdujących i folderów w tych folderach, itd to wpadnę do Gdyni.
Go to the top of the page
+Quote Post
Kicok
post 28.07.2008, 20:43:57
Post #16





Grupa: Zarejestrowani
Postów: 1 033
Pomógł: 125
Dołączył: 17.09.2005
Skąd: Żywiec

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


Cytat("mike")
Pochwal się.

  1. <pre>
  2. <b>c:/usr/</b>
  3. <?php
  4.  
  5. $directiries = array();
  6.  
  7. $directories[0]['dirname'] = 'c:/usr/';
  8. $directories[0]['pointer'] = opendir( 'c:/usr/' );
  9. $level = 1;
  10.  
  11.  
  12. while( true )
  13. {
  14. $file = readdir( $directories[0]['pointer'] );
  15.  
  16. if( !$file )
  17. {
  18. closedir( $directories[0]['pointer'] );
  19. array_shift( $directories );
  20.  
  21. if( !--$level )
  22. {
  23. break;
  24. }
  25. }
  26. elseif( $file != '.' && $file != '..' )
  27. {
  28. echo str_repeat( ' ', $level * 2 ) . $file . "\n";
  29.  
  30. if( is_dir( $directories[0]['dirname'] . $file ) )
  31. {
  32. ++$level;
  33.  
  34. array_unshift( $directories, array() );
  35. $directories[0]['dirname'] = $directories[1]['dirname'] . $file . '/';
  36. $directories[0]['pointer'] = opendir( $directories[0]['dirname'] ); 
  37. }
  38. }
  39. }
  40.  
  41. ?>
  42. </pre>


Proszę. Tablica $directories działa tutaj jak stos ( Nie wiem od której wersji działa "prawdziwy stos" - SPLStack - pewnie 5.3 albo 6.0 )

W sumie zasada działania podobna jak u zimi'ego

Ten post edytował Kicok 28.07.2008, 20:46:45


--------------------
"Sumienie mam czyste, bo nieużywane."
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: 14.08.2025 - 08:11