2min Devops

How to: Recursive functions

Uitbreiding

De basis van deze functie is bijna precies hetzelfde als die voor het menu op de vorrige pagina, alleen heb je nu geen array om mee te starten.

PHP Code

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
<?PHP
function print_dir($dir) //1.begin de functie
{
    $readdir = opendir($dir); //2. laat php de dir openen
    echo '<ul>'; //3. begin van een folder
    while ($item = readdir($readdir)) { //4. loop door de dir
        if($item != ".." && $item != ".") //5. Eerst even kijken of het item geen '..' (Unix link naar vorige dir) of '.' (Unix link naar huidige dir) is
        {
            echo '<li>'; //6. begin een file/dir naam
            if(is_dir($dir.''.$item)) //7. is het item een dir
            {
                echo '<b>=> '.$item.'</b>'; //8. Word de dirnaam weergeven
                print_dir($dir.''.$item.'/'); //9. En de functie opnieuw gestart met deze subdir
            }
            else //10. anders
            {
                echo $item; //11. word de naam van het bestand weergeven
            }
            echo '</li>'; //12. einde van een dir/file
        }
    }
    echo '</ul>'; //13. einde van een dir
}
 
 
//functie aanroepen voor de dir 'scripts' (vergeet er geen slash achter te zetten)
print_dir('projecten/scripts/');
?>

Een resultaat kan bijv. zijn:

PHP Code

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
<ul>
	<li><b>=> scripts</b>
		<ul>
			<li><b>=> borders</b>
				<ul>
					<li>border.jpg</li>
					<li>index.htm</li>
				</ul>
			</li>
			<li>addrow.htm</li>
			<li>directdownload.php</li>
			<li><b>=> pagination</b>
				<ul>
					<li>insert.phps</li>
					<li>pagination.php</li>
					<li>pagination.phps</li>
				</ul>
			</li>
			<li><b>=> menu</b>
				<ul>
					<li>bg.gif</li>
					<li>menu.htm</li>
					<li>bullet.gif</li>
				</ul>
			</li>
			<li>Untitled-1.php</li>
		</ul>
	</li>
</ul>

Zoals je ziet is hier niet bepaalt gesorteerd op alfabet en dirs eerst zoals in bijv. Windows.
Dit kun je oplossen door in plaats van (8.) de dirnaam en (11.) de filenaam te echoën deze in een array te zetten,
Die je later weer kunt echoën met het script van de vorige pagina.
Als hier vraag naar is wil ik wel een voorbeeldje maken, die vind je dan wel terug in de reacties.

Wij bedanken Joolee voor het maken van deze tutorial.

Table of contents