PHP создает структуру дерева файлов JSON из плоского массива

У меня есть метод, который просматривает каталог и возвращает массив структуры файла, пример этого следующий;

Array
(
[0] => filename.png
[directory] => Array
(
[subdirectory] => Array
(
[0] => filename.jpg
)

)

[directory] => Array
(
[0] => filename.png
)

[directory] => Array
(
)

[directory] => Array
(
[0] => filename.png
)

[directory] => Array
(
[0] => filename.png
)

)

Код, который я использовал для создания этого, выглядит следующим образом;

function dirToArray($dir) {
$contents = array();

foreach (scandir($dir) as $node) {
if ($node == '.' || $node == '..') continue;

if (is_dir($dir . '/' . $node)) {
$contents[$node] = dirToArray($dir . '/' . $node);
} else {
$contents[] = $node;
}
}

return $contents;
}

Мне нужно сгладить это, чтобы я мог отобразить это, точно так же, как вы видите здесь;

filename.png
directory
.. subdirectory
.. .. filename.png
directory
.. filename.png
directory
.. filename.png
directory
.. filename.png

Проблема в том, что мне нужно ввести данные в структуре json, которая не меняется.
Описание структуры выглядит следующим образом: полный путь к файлу, затем текст для отображения и, наконец, «лист» (file = true, directory = false)

Вот как это должно выглядеть;

[ ['fullpath', 'displaytext', 'true'],['fullpath', 'displaytext', 'false'] ]

Я действительно запутался в том, как это сделать, любая помощь будет принята с благодарностью.

Спасибо

0

Решение

Мой подход будет следующим:

 $res=[];
function flatten ($in, $dir, $dots, &$result) {
$tmp = [];
if (is_array($in)) {
$tmp[0] = $dir;
$tmp[1] = $dots.'Directory'; //displaytext
$tmp[2] = false;
$result[] = $tmp;
$dots = $dots.'.. ';
foreach($in as $k => $v) flatten($v, $dir.'/'.$k, $dots, $result);
} else {
$tmp[0] = $dir.'/'.$in;
$tmp[1] = $dots.$in; //displaytext
$tmp[2] = true;
$result[] = $tmp;
}
}
flatten($array, '','', $res); //$array is the array you created
echo json_encode($res);

Но код не проверен. Идея состоит в том, чтобы рекурсивно объединять ключи (каталоги) до тех пор, пока не дойдете до листьев (файлов), и сохранить все в массиве, который передается по ссылке.

Последнее редактирование должно наконец исправить это.

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector