function getFolderHierarchy($folders) {
$hierarchy = array();
$parents = array();
$p = 0;
$current =& $hierarchy;
$depth = 1;
$previous = null;
foreach ($folders as $folder) {
$path = explode(DIRECTORY_SEPARATOR, $folder['dir']);
$pCount = count($path);
if ($pCount > $depth) {
$parents[$p++] =& $current;
$current =& $previous;
$depth = $pCount;
} else if ($pCount < $depth) {
$current =& $parents[--$p];
$depth = $pCount;
}
$current[$path[$pCount-1]] = array(
null => $folder['id']
);
$previous =& $current[$path[$pCount-1]];
}
return $hierarchy;
}
$folders = array(
array(
'dir' => 'South America',
'id' => '1'
),
array(
'dir' => 'South America/Ecuador',
'id' => '4'
),
array(
'dir' => 'South America/Ecuador/Alausi',
'id' => '29'
),
array(
'dir' => 'South America/Ecuador/Alausi/Nariz del Diablo',
'id' => '30'
),
array(
'dir' => 'South America/Ecuador/Amazon',
'id' => '31'
),
array(
'dir' => 'South America/Ecuador/Banos',
'id' => '10'
),
array(
'dir' => 'South America/Ecuador/Banos/Canyoning',
'id' => '11'
),
array(
'dir' => 'South America/Ecuador/Cotopaxi National Park',
'id' => '16'
),
array(
'dir' => 'South America/Ecuador/Cotopaxi National Park/Cotopaxi',
'id' => '19'
),
array(
'dir' => 'South America/Ecuador/Cotopaxi National Park/Ruminahui',
'id' => '18'
),
array(
'dir' => 'South America/Ecuador/Cotopaxi National Park/Secret Garden Cotopaxi',
'id' => '17'
),
array(
'dir' => 'South America/Ecuador/Cuenca',
'id' => '21'
),
array(
'dir' => 'South America/Ecuador/Cuenca/Cajas National Park',
'id' => '23'
),
array(
'dir' => 'South America/Ecuador/Cuenca/Ingapirca',
'id' => '22'
),
array(
'dir' => 'South America/Ecuador/Mindo',
'id' => '24'
),
array(
'dir' => 'South America/Ecuador/Mindo/El Descanso',
'id' => '26'
),
array(
'dir' => 'South America/Ecuador/Mindo/El Quetzal',
'id' => '27'
),
array(
'dir' => 'South America/Ecuador/Mindo/Mariposas de Mindo',
'id' => '28'
),
array(
'dir' => 'South America/Ecuador/Mindo/Tarabita',
'id' => '25'
),
);
print_r(getFolderHierarchy($folders));