Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP] Scieżki plików do tablicy
dante90
post 20.08.2009, 22:14:28
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 1
Dołączył: 5.04.2009

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


Witam,
pobieram listę ścieżek plików z katalogu, i teraz chcę ją dać do tablicy przykładowo mam
Kod
    .\my\media\gg\hura2.gif
    .\my\media\gg\luzik.gif
    .\my\media\gg\rotfl.gif
    .\my\media\gg\usmiech.gif
    .\my\media\Next.gif
    .\my\css\main.css
    ...


i teraz chcę to przeobrazić do postaci
Kod
  Array
  (
      [my] => Array
        (
            [media] => Array
                (
                    [gg] => Array
                        (
                            [0] => hura2.gif
                            [1] => luzik.gif
                            [2] => usmiech.gif
                            [3] => Next.gif
                        )

                    [0] => Next.gif
                )

        )

    [css] => Array
        (
            [0] => main.css
        )}


a tu scrypcik
  1. $objDir = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( './' ) );
  2. $tablica = array();
  3. foreach( $objDir as $objFile ){
  4. $tmpTab = explode('\\',$objFile);
  5. $count = 1;
  6. while (isset($tmpTab[$count])) {
  7. dodajGalaz($drzewo,$galaz);
  8. //myślałem o funkcji do której przypisujemy poklei gałęzie aż do ostatniego pliku,
  9. //lecz napotkałem się na tzw ścianę, i nic nie mogę wymyślić
  10. $i++;
  11. }
  12. echo $objFile . '<br>'; //wyświetlanie listy
  13. }


Ten post edytował dante90 20.08.2009, 22:22:09
Go to the top of the page
+Quote Post
Darti
post 20.08.2009, 23:17:11
Post #2





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

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


W sumie to nie wiem dlaczego to dziala, ale moze sie przyda smile.gif

  1. $kat = array('.\my\media\gg\hura2.gif',
  2. '.\my\media\gg\luzik.gif',
  3. '.\my\media\gg\rotfl.gif',
  4. '.\my\media\gg\usmiech.gif',
  5. '.\my\media\Next.gif',
  6. '.\my\css\main.css');
  7.  
  8. $out = array();
  9.  
  10. function dir_it(&$out,$plik=''){
  11. $temp = explode('\\',$plik);
  12. array_shift($temp);
  13. array_shift($temp);
  14. for($i=0;$i<count($temp)-1;$i++){
  15. $str .= '[\''.$temp[$i].'\']';
  16. }
  17. $abla = eval ('$a'.$str.'=\''.end($temp).'\';');
  18. $out = array_merge_recursive($out,$a);
  19. }
  20.  
  21. foreach ($kat as $plik){
  22. dir_it($out,$plik);
  23. }
  24.  
  25. print_r($out);


Ten post edytował Darti 20.08.2009, 23:21:21


--------------------
The answer is out there, Neo. It's looking for you. And it will find you, if you want it to.
SERVER_SOFTWARE : Apache/2.2.4 (Win32) PHP/5.2.1
MySQL Client API version : 5.0.27
Go to the top of the page
+Quote Post
wookieb
post 21.08.2009, 06:23:08
Post #3





Grupa: Moderatorzy
Postów: 8 989
Pomógł: 1550
Dołączył: 8.08.2008
Skąd: Słupsk/Gdańsk




@Darti. Nie powinno się używać eval. Należy użyć referencje.

  1. $kat = array('.\my\media\gg\hura2.gif',
  2. '.\my\media\gg\luzik.gif',
  3. '.\my\media\gg\rotfl.gif',
  4. '.\my\media\gg\usmiech.gif',
  5. '.\my\media\Next.gif',
  6. '.\my\css\main.css');
  7.  
  8.  
  9. function toTreeArray(array $arr)
  10. {
  11. $tmpArr=array();
  12.  
  13. foreach($arr as $el)
  14. {
  15. $tElements=explode('\\', $el);
  16. if(isset($tElements[0]) && $tElements[0]=='.') array_shift($tElements);
  17.  
  18. $elementsCount = count($tElements);
  19. $tReference = &$tmpArr;
  20.  
  21. for($i=0; $i<$elementsCount; $i++)
  22. {
  23. if( $i<($elementsCount - 1) )
  24. {
  25. if(!isset($tReference[$tElements[$i]])) $tReference[$tElements[$i]]=array();
  26. $tReference=&$tReference[$tElements[$i]];
  27. }
  28. else
  29. {
  30. // ostatni element musi byc wartoscia a nie kluczem
  31. $tReference[]=$tElements[$i];
  32. }
  33. }
  34. }
  35.  
  36. return $tmpArr;
  37. }
  38.  
  39. print_r(toTreeArray($kat));


--------------------
Go to the top of the page
+Quote Post
Darti
post 21.08.2009, 07:18:03
Post #4





Grupa: Zarejestrowani
Postów: 1 076
Pomógł: 62
Dołączył: 6.03.2005
Skąd: Wroc

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


Cytat(wookieb @ 21.08.2009, 06:23:08 ) *
@Darti. Nie powinno się używać eval. Należy użyć referencje.


masz rację smile.gif


--------------------
The answer is out there, Neo. It's looking for you. And it will find you, if you want it to.
SERVER_SOFTWARE : Apache/2.2.4 (Win32) PHP/5.2.1
MySQL Client API version : 5.0.27
Go to the top of the page
+Quote Post
dante90
post 22.08.2009, 22:25:53
Post #5





Grupa: Zarejestrowani
Postów: 21
Pomógł: 1
Dołączył: 5.04.2009

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


Dzięki za pomoc, ale w sumie musiałem trochę zmienić założenia, chciałem zrobić w stylu drzewa, ale przy dysku 750GB może mi się ta tablica trochę rozrosnąć a co za tym idzie "pokrzaczyc" i zamulić przy tworzeniu tablicy biggrin.gif wiec widok będzie z jednego foldera i klikając w folder otworzy się zawartość tego foldera, teraz chciałem to zrobić ajax'sem ale w scieżce mogą być przecież spacje, a jak zwykle wysyłam metodą GET to przecież w linku nie może być spacji, tak wiec znalazłem funkcję wysyłającą metodą post, ale gdy odczytuje tablice $_POST, czy nawet $_REQUEST to wyswietla pustą tablice, tak wiec jakbyście mogli wytłumczyć dlaczego nie przekazuje scieżki.

wywolanie:
  1. echo '<tr onClick="otworzKatalog(\''.addslashes($element['sciezka']).'\');">';


funkcje
  1. <script type="text/javascript">
  2.  
  3. function onEnd(text, xml){
  4.  
  5. }
  6.  
  7. function otworzKatalog(sciezka){
  8. if (sciezka!=''){
  9. url = "./wybor.php";
  10. startPOSTRequest(url, sciezka, onComplete, onEnd);
  11. }
  12.  
  13. }
  14.  
  15. function startPOSTRequest(url, params, onComplete, onEnd){
  16. var XMLHttpRequestObject = getXMLHttpRequestObject();
  17. if(XMLHttpRequestObject){
  18. XMLHttpRequestObject.open("POST", url);
  19. XMLHttpRequestObject.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  20. XMLHttpRequestObject.onreadystatechange = function(){
  21. if (XMLHttpRequestObject.readyState == 4){
  22. if(XMLHttpRequestObject.status == 200){
  23. var responseXML = XMLHttpRequestObject.responseXML;
  24. var responseText = XMLHttpRequestObject.responseText;
  25. onComplete(responseText, responseXML);
  26. }
  27. delete XMLHttpRequestObject;
  28. onEnd();
  29. }
  30. };
  31. XMLHttpRequestObject.send(params);
  32. }
  33. }
  34.  
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 - 12:40