Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Scieżki plików do tablicy
Forum PHP.pl > Forum > Przedszkole
dante90
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. }
Darti
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);
wookieb
@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));
Darti
Cytat(wookieb @ 21.08.2009, 06:23:08 ) *
@Darti. Nie powinno się używać eval. Należy użyć referencje.


masz rację smile.gif
dante90
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.  
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.