将 PHP 文件树数组转换为相对路径数组

Posted

技术标签:

【中文标题】将 PHP 文件树数组转换为相对路径数组【英文标题】:Convert PHP file tree array to array of relative paths 【发布时间】:2018-07-02 02:05:11 【问题描述】:

我需要获取一个定义文件树结构的多维数组并将其转换为相对路径数组。我看到很多关于如何反其道而行之的答案。

我需要这个:

$file_tree = [
  'img',
  'js' => [
    'src',
    'min',
    'libraries' => ['jquery.js']
  ],
  'src' => [
    'controller' => ['user']
  ]
];

变成这样:

$file_paths = ['img','js/src','js/min','js/libraries/jquery.js','src/controller/user'] 

【问题讨论】:

有试过的起始码吗? 请附上一些代码sn-ps。那么只有我们可以帮助你的朋友 我没有提供任何起始代码,因为我想看看有人可能建议只知道目标的解决方案,而不受我损坏的代码的影响。 【参考方案1】:

你可以使用递归。

制作一个processArray($o, $a, $f, $b = false)的参数是

$o - 输入数组

$a - 累加器数组

$f - 文件路径累加器

$b - 这是检查函数是否首先被调用

function processArray($o, $a = array(), $f = array() , $b = true)
    foreach( $o as $k => $v ) 
        if ( is_array( $v ) ) 
            $f[] = $k;
            if ( $b ) $f = array($k);
            $a = processArray( $v, $a, $f, false );
         else 
            $r = implode('/',$f);
            $a[] = $r === '' ? $v : $r . '/' . $v;
        
    

    return $a;


$result = processArray( $file_tree ); //Call the function

echo "<pre>";
print_r( $result );
echo "</pre>";

这将导致:

Array
(
    [0] => img
    [1] => js/src
    [2] => js/min
    [3] => js/libraries/jquery.js
    [4] => src/controller/user
)

【讨论】:

这正是我所需要的。谢谢! 乐于帮助@daniel_lowetz :)

以上是关于将 PHP 文件树数组转换为相对路径数组的主要内容,如果未能解决你的问题,请参考以下文章

PHP 相对路径转换为绝对路径 realpath

引用外部文件时将绝对目录转换为相对路径

20191211学习总结

PHP绝对路径的问题

java 怎么把文件的绝对路径转换成相对路径

使用 Bash 将给定当前目录的绝对路径转换为相对路径