我有一个查看目录并返回文件结构数组的方法,其示例如下;
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 :(得分:1)
我的方法是:
$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);
但代码未经过测试。我们的想法是递归地对密钥(目录)进行汇总,直到您到达叶子(文件),并将所有内容存储在通过引用传递的数组中。
最后一次编辑应该最终修复它。