Конвертировать массив дерева файлов PHP в массив относительных путей - PullRequest
0 голосов
/ 02 июля 2018

Мне нужно взять многомерный массив, который определяет структуру дерева файлов, и преобразовать его в массив относительных путей. Я вижу множество ответов о том, как поступить наоборот.

Мне нужно это:

$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'] 

1 Ответ

0 голосов
/ 02 июля 2018

Вы можете использовать рекурсию.

Сделать processArray($o, $a, $f, $b = false) Параметры

$o - массив ввода

$a - аккумуляторная батарея

$f - путь к файлу аккумулятора

$b - это для проверки, если функция сначала вызывается

<code>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 "
";

Это приведет к:

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