<?php
$arr = [
0 => [
'id' => 0,
'dir_name' => '',
'children' => [
36 => [
'id' => 36,
'dir_name' => 'dir 36',
'children' => [
92 => [
'id' => 92,
'dir_name' => 'dir 92',
'children' => [
93 => [
'id' => 93,
'dir_name' => 'dir 93'
]
]
],
94 => [
'id' => 94,
'dir_name' => 'dir 94',
'children' => [
95 => [
'id' => 95,
'dir_name' => 'dir 95'
]
]
]
]
]
]
]
];
function all_dir($array, $id_selected = 0, $pos = 0, $tab_pos = [])
{
$flat = [];
foreach ($array as $k => $value)
{
$flat = array_merge($flat, all_dir
($value, $id_selected, $pos, $tab_pos)); else
{
if ($k == "id")
{
$option = '<option value="' . $value . '"';
if ($value == $id_selected)
$option .=" selected ";
}
if ($k == "dir_name")
{
$flat[] = $value;
$tab_pos[$pos] = $value;
$val = '';
for ($i = 0; $i <= $pos; $i++)
{
$val .= $tab_pos[$i] . '/';
}
$option .='>' . $val . '</option>'.PHP_EOL;
echo $option;
$pos++;
}
}
}
return $flat;
}
function get_dir($array, $names = [])
{
$ret = [];
foreach ($array as $k => $v)
{
$id = $v['id'];
$name = $v['dir_name'];
$ret[$id] = $names;
$ret[$id][] = $name;
if (!empty($v['children'])) {
$xret = get_dir($v['children'], $ret[$id]);
foreach ($xret as $kk => $vv)
{
$ret[$kk] = $vv;
}
}
}
return $ret;
}
function get_dir_root($array)
{
$ret = [];
foreach (get_dir($array) as $k => $v)
{
if ($ret[$k] == '')
$ret[$k] = '/';
else
$ret[$k] .= '/';
}
return $ret;
}
PD9waHAKCgkkYXJyID0gWwoJCTAgPT4gWwoJCQknaWQnID0+IDAsCgkJCSdkaXJfbmFtZScgPT4gJycsCgkJCSdjaGlsZHJlbicgPT4gWwoJCQkJMzYgPT4gWwoJCQkJCSdpZCcgPT4gMzYsCgkJCQkJJ2Rpcl9uYW1lJyA9PiAnZGlyIDM2JywKCQkJCQknY2hpbGRyZW4nID0+IFsKCQkJCQkJOTIgPT4gWwoJCQkJCQkJJ2lkJyA9PiA5MiwKCQkJCQkJCSdkaXJfbmFtZScgPT4gJ2RpciA5MicsCgkJCQkJCQknY2hpbGRyZW4nID0+IFsKCQkJCQkJCQk5MyA9PiBbCgkJCQkJCQkJCSdpZCcgPT4gOTMsCgkJCQkJCQkJCSdkaXJfbmFtZScgPT4gJ2RpciA5MycKCQkJCQkJCQldCgkJCQkJCQldCgkJCQkJCV0sCgkJCQkJCTk0ID0+IFsKCQkJCQkJCSdpZCcgPT4gOTQsCgkJCQkJCQknZGlyX25hbWUnID0+ICdkaXIgOTQnLAoJCQkJCQkJJ2NoaWxkcmVuJyA9PiBbCgkJCQkJCQkJOTUgPT4gWwoJCQkJCQkJCQknaWQnID0+IDk1LAoJCQkJCQkJCQknZGlyX25hbWUnID0+ICdkaXIgOTUnCgkJCQkJCQkJXQoJCQkJCQkJXQoJCQkJCQldCgkJCQkJXQoJCQkJXQoJCQldCgkJXQoJXTsKCglmdW5jdGlvbiBhbGxfZGlyKCRhcnJheSwgJGlkX3NlbGVjdGVkID0gMCwgJHBvcyA9IDAsICR0YWJfcG9zID0gW10pCgl7CgkJJGZsYXQgPSBbXTsKCgkJZm9yZWFjaCAoJGFycmF5IGFzICRrID0+ICR2YWx1ZSkKCQl7CgoJCQlpZiAoaXNfYXJyYXkoJHZhbHVlKSkKCQkJCSRmbGF0ID0gYXJyYXlfbWVyZ2UoJGZsYXQsIGFsbF9kaXIoJHZhbHVlLCAkaWRfc2VsZWN0ZWQsICRwb3MsICR0YWJfcG9zKSk7CgkJCWVsc2UKCQkJewoJCQkJaWYgKCRrID09ICJpZCIpCgkJCQl7CgkJCQkJJG9wdGlvbiA9ICc8b3B0aW9uIHZhbHVlPSInIC4gJHZhbHVlIC4gJyInOwoJCQkJCWlmICgkdmFsdWUgPT0gJGlkX3NlbGVjdGVkKQoJCQkJCQkkb3B0aW9uIC49IiBzZWxlY3RlZCAiOwoJCQkJfQoKCQkJCWlmICgkayA9PSAiZGlyX25hbWUiKQoJCQkJewoJCQkJCSRmbGF0W10gPSAkdmFsdWU7CgkJCQkJJHRhYl9wb3NbJHBvc10gPSAkdmFsdWU7CgoJCQkJCSR2YWwgPSAnJzsKCQkJCQlmb3IgKCRpID0gMDsgJGkgPD0gJHBvczsgJGkrKykKCQkJCQl7CgkJCQkJCSR2YWwgLj0gJHRhYl9wb3NbJGldIC4gJy8nOwoJCQkJCX0KCgkJCQkJJG9wdGlvbiAuPSc+JyAuICR2YWwgLiAnPC9vcHRpb24+Jy5QSFBfRU9MOwoKCQkJCQllY2hvICRvcHRpb247CgoJCQkJCSRwb3MrKzsKCQkJCX0KCQkJfQoJCX0KCQlyZXR1cm4gJGZsYXQ7Cgl9CgoJZnVuY3Rpb24gZ2V0X2RpcigkYXJyYXksICRuYW1lcyA9IFtdKQoJewoJCSRyZXQgPSBbXTsKCgkJZm9yZWFjaCAoJGFycmF5IGFzICRrID0+ICR2KQoJCXsKCQkJJGlkID0gJHZbJ2lkJ107CgkJCSRuYW1lID0gJHZbJ2Rpcl9uYW1lJ107CgoJCQkkcmV0WyRpZF0gPSAkbmFtZXM7CgkJCSRyZXRbJGlkXVtdID0gJG5hbWU7CgoJCQlpZiAoIWVtcHR5KCR2WydjaGlsZHJlbiddKSkKCQkJewoJCQkJJHhyZXQgPSBnZXRfZGlyKCR2WydjaGlsZHJlbiddLCAkcmV0WyRpZF0pOwoKCQkJCWZvcmVhY2ggKCR4cmV0IGFzICRrayA9PiAkdnYpCgkJCQl7CgkJCQkJJHJldFska2tdID0gJHZ2OwoJCQkJfQoJCQl9CgkJfQoKCQlyZXR1cm4gJHJldDsKCX0KCglmdW5jdGlvbiBnZXRfZGlyX3Jvb3QoJGFycmF5KQoJewoJCSRyZXQgPSBbXTsKCgkJZm9yZWFjaCAoZ2V0X2RpcigkYXJyYXkpIGFzICRrID0+ICR2KQoJCXsKCQkJJHJldFska10gPSBpbXBsb2RlICgnLycsICR2KTsKCgkJCWlmICgkcmV0WyRrXSA9PSAnJykKCQkJCSRyZXRbJGtdID0gJy8nOwoJCQllbHNlCgkJCQkkcmV0WyRrXSAuPSAnLyc7CgkJfQoKCQlyZXR1cm4gJHJldDsKCX0KCgl2YXJfZXhwb3J0KGFsbF9kaXIoJGFyciwgOTMpKTsKCXZhcl9leHBvcnQoZ2V0X2Rpcl9yb290KCRhcnIpKTsK
<option value="0">/</option>
<option value="36">/dir 36/</option>
<option value="92">/dir 36/dir 92/</option>
<option value="93" selected >/dir 36/dir 92/dir 93/</option>
<option value="94">/dir 36/dir 94/</option>
<option value="95">/dir 36/dir 94/dir 95/</option>
array (
0 => '',
1 => 'dir 36',
2 => 'dir 92',
3 => 'dir 93',
4 => 'dir 94',
5 => 'dir 95',
)array (
0 => '/',
36 => '/dir 36/',
92 => '/dir 36/dir 92/',
93 => '/dir 36/dir 92/dir 93/',
94 => '/dir 36/dir 94/',
95 => '/dir 36/dir 94/dir 95/',
)