У меня есть массив как это:Создать многомерный массив из плоского массива файла
$arr = array(
'home.js' => new File(),
'view/index.html' => new File(),
'src/index.js' => new File(),
'src/libs/jquery.js' => new File()
);
Теперь я хочу, чтобы преобразовать в структуру, как это:
Array
(
[0] => Array
(
[text] => home.js
)
[1] => Array
(
[text] => view
[children] => Array
(
[0] => Array
(
[text] => index.html
)
)
)
[2] => Array
(
[text] => src
[children] => Array
(
[0] => Array
(
[text] => index.js
)
[1] => Array
(
[text] => libs
[children] => Array
(
[0] => Array
(
[text] => jquery.js
)
)
)
)
)
)
Я пытался в течение нескольких часов, с помощью StackOverfow отвечает, но я не мог придумать решение, так как все другие вопросы имеют другую настройку.
Edit:
То, что я получил до сих пор с помощью так (не помню точного ответа, хотя):
$out = array();
foreach($arr as $path => $file) {
$parts = explode('/', trim($path, '/'));
applyChain($out, $parts, $file);
}
function applyChain(&$arr, $parts, $value)
{
if (!is_array($parts)) {
return;
}
if (count($parts) == 0) {
$arr = $value;
} else {
array_shift($parts);
applyChain($arr[], $parts, $value);
}
}
print_r($out);
Я не знаю, как точно это работает, особенно часть applyChain($arr[] ...
). Он работает с глубиной, но не с именами файлов. Я получаю следующий вывод:
Array
(
[0] => File Object
(
)
[1] => Array
(
[0] => File Object
(
)
)
[2] => Array
(
[0] => File Object
(
)
)
[3] => Array
(
[0] => Array
(
[0] => File Object
(
)
)
)
)
рекурсивной функции и взрывается может помочь. Кстати, что ты пробовал? –
Я отредактировал мой вопрос с тем, что я пробовал до сих пор. –