» Vad är en rekursiv funktion?
En rekursiv funktion är en funktion som kallar på sig själv. Ta en titt på exemplet nedan. Den funktionen läser in allt innehåll i en mapp (inklusive eventuella undermappar) genom att kalla på sig själv när en undermapp hittas. Rekursiva funktioner kan även vara användbara i andra situationer.
function getFolderTree($folder)
{
$folder .= ( substr($folder, -1) != '/' ) ? '/' : '';
$handle = opendir($folder);
$tree = array('folders' => array(), 'files' => array());
while(($item = readdir($handle)) !== false)
{
if(( $item != '.' ) && ( $item != '..' ))
{
if(is_dir($folder.$item))
{ $tree['folders'][$item] = getFolderTree($folder.$item); }
else $tree['files'][] = $item;
}
}
return array_merge($tree['folders'], $tree['files']);
}
Funktionen används sedan som vilken annan funktion som helst.
$tree = getFolderTree('/sökvägen/till/mappen');
echo '<pre>', print_r($tree, true);
Resulatet från ovanstående skript kan då bli något liknande:
Array
(
[anders] => Array
(
[divproblem] => Array
(
[0] => index.html
)
)
[div] => Array
(
[0] => middle.html
[1] => lavve.html
[2] => ninjja.html
[3] => fxvision.html
[4] => decar.html
[5] => decar-height.html
[6] => absolute-middle.html
[7] => float-left.html
)
[table] => Array
(
[0] => middle.html
[1] => middle-ii.html
)
[0] => disable_textarea.php
[1] => div-height.html
[2] => overflow.php
[3] => overflow_comment.php
[4] => div-height-2.html
[5] => div-height-3.html
[6] => table-over.html
[7] => sabla-divvar.html
[8] => sabla-divvar-2.html
[9] => sabla-divvar-dectgap.html
[10] => mark-select.html
[11] => opacity.html
)