Конвертировать массив дерева файлов PHP в массив относительных путей

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

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

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

0

Решение

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

Делать 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
)
0

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

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

По вопросам рекламы [email protected]