Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Funkcja
xokisx
post
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
mike
post
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
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
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
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
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
Go to the top of the page
+Quote Post
1010
post
Post #7





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

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


Rzeczywiście pyro (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) przegapiłem (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) Wybaczcie...
Go to the top of the page
+Quote Post
kampio
post
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 (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Go to the top of the page
+Quote Post
mike
post
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 (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) bo innej możliwości nie ma.
Go to the top of the page
+Quote Post
zimi
post
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
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
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
Go to the top of the page
+Quote Post
mike
post
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
Post #14





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

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


lol, @Kicok odczep się (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) :P moje piwo (IMG:http://forum.php.pl/style_emoticons/default/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 (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) :P

edit: jak się napiszę na kilka sposobów będzie cała skrzynka?(IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) :P

Ten post edytował zimi 28.07.2008, 20:08:24
Go to the top of the page
+Quote Post
mike
post
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
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
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 22.08.2025 - 16:49