Doorzoeken van mappen
De mapnaam kan zich op hetzelfde nivo bevinden, maar ook op een nivo dieper of misschien nog dieper.
Voorbeeld:
pathnaarmap/foto/thumb
pathnaarmap/foto/album1/thumb
pathnaarmap/foto/album2/fotograaf1/thumb
pathnaarmap/foto/album2/fotograaf2/thumb
pathnaarmap/foto/album3/fotograaf1/thumb
pathnaarmap/foto/album3/fotograaf2/thumb
De reden dat ik dit wil is om vanuit het fotoalbum van Arjan Kapteijn op mijn frontpagina een random foto banner te plaatsen.
De banner zelf maken lukt mij goed, maar om in de mappenstructuur te zoeken en dan een random foto er uit te spugen vind ik lastig.
Zou zo'n functie traag zijn, wat denken jullie?
directoryIterator kunnen kijken...
Je zou eens naar de Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
$savedPaths = array();
function loadFiles($map){
$arr = array();
$iterator = new RecursiveDirectoryIterator($map);
foreach (new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::CHILD_FIRST) as $bestand){
if($bestand->isFile() || $bestand->isDir())$arr[]=$bestand->getFileName();
}
return $arr;
}
function loadFolder($map){
$arr = array();
$savedPaths = array();
$iterator = new RecursiveDirectoryIterator($map);
$b=0;
foreach (new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::CHILD_FIRST) as $bestand){
if(!in_array($bestand->getPath(),$savedPaths)){
$path = explode('\\',$bestand->getPath());
$arr[] = $path;
$savedPaths[] = $bestand->getPath();
$arr[$b]['files'] = loadFiles($savedPaths[$b]);
$b++;
}
}
/*echo '<pre>';
print_r($savedPaths);
echo '</pre>';*/
return $arr;
}
$mappen = loadFolder('.');
echo '<pre>';
print_r($mappen);
echo '</pre>';
?>
$savedPaths = array();
function loadFiles($map){
$arr = array();
$iterator = new RecursiveDirectoryIterator($map);
foreach (new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::CHILD_FIRST) as $bestand){
if($bestand->isFile() || $bestand->isDir())$arr[]=$bestand->getFileName();
}
return $arr;
}
function loadFolder($map){
$arr = array();
$savedPaths = array();
$iterator = new RecursiveDirectoryIterator($map);
$b=0;
foreach (new RecursiveIteratorIterator($iterator, RecursiveIteratorIterator::CHILD_FIRST) as $bestand){
if(!in_array($bestand->getPath(),$savedPaths)){
$path = explode('\\',$bestand->getPath());
$arr[] = $path;
$savedPaths[] = $bestand->getPath();
$arr[$b]['files'] = loadFiles($savedPaths[$b]);
$b++;
}
}
/*echo '<pre>';
print_r($savedPaths);
echo '</pre>';*/
return $arr;
}
$mappen = loadFolder('.');
echo '<pre>';
print_r($mappen);
echo '</pre>';
?>
Voorbeeld van een output:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
Array
(
[0] => Array
(
[0] => .
[files] => Array
(
[0] => directory.php
[1] => map1
[2] => bestand.txt
[3] => bestand2.txt
[4] => subsubmap1
[5] => submap1
[6] => submap2
[7] => map2
)
)
[1] => Array
(
[0] => .
[1] => map2
[2] => submap1
[files] => Array
(
[0] => bestand.txt
[1] => bestand2.txt
[2] => subsubmap1
)
)
[2] => Array
(
[0] => .
[1] => map2
[2] => submap1
[3] => subsubmap1
[files] => Array
(
[0] => bestand2.txt
)
)
[3] => Array
(
[0] => .
[1] => map2
[files] => Array
(
[0] => bestand.txt
[1] => bestand2.txt
[2] => subsubmap1
[3] => submap1
[4] => submap2
)
)
)
(
[0] => Array
(
[0] => .
[files] => Array
(
[0] => directory.php
[1] => map1
[2] => bestand.txt
[3] => bestand2.txt
[4] => subsubmap1
[5] => submap1
[6] => submap2
[7] => map2
)
)
[1] => Array
(
[0] => .
[1] => map2
[2] => submap1
[files] => Array
(
[0] => bestand.txt
[1] => bestand2.txt
[2] => subsubmap1
)
)
[2] => Array
(
[0] => .
[1] => map2
[2] => submap1
[3] => subsubmap1
[files] => Array
(
[0] => bestand2.txt
)
)
[3] => Array
(
[0] => .
[1] => map2
[files] => Array
(
[0] => bestand.txt
[1] => bestand2.txt
[2] => subsubmap1
[3] => submap1
[4] => submap2
)
)
)
Maar ik zie dat je PHP 5.1 nodig hebt. Ik draai nog op PHP 4.4.8.
RecursiveDirectoryIterator is een verdomt handige functie :).
Maar als ik zo door de functie heen kijk ziet het er idd verdraait handig uit.
Waar zou ik gebruik van kunnen maken in mijn geval?
Gewijzigd op 01/01/1970 01:00:00 door Martijn Roverts
Er zal ongetwijfeld op internet ook wel een recursief script te vinden zijn die met opendir werkt.
Bedankt! Ik ga er mee aan de slag en als ik nog vragen heb gooi ik ze hier weer naar binnen.