NikitOS_MV
@NikitOS_MV
Король шутов

Как разбить путь на массивы вида файл/папка + родительская папка?

Необходимо разбить пусть к файлу на массив с массивами, в которых будет два значения: имя файла/папки и имя дочерней папки.
Например, есть путь /dir1/dir2/file.txt, его нужно разбить так, чтобы на выходе было примерно следующее:
array(3) {
  [0]=>
  array(2) {
    ["file_name"]=>
    string(4) "dir1"
    ["parent_file"]=>
    string(0) ""
  }
  [1]=>
  array(2) {
    ["file_name"]=>
    string(4) "dir2"
    ["parent_file"]=>
    string(4) "dir1"
  }
  [2]=>
  array(2) {
    ["file_name"]=>
    string(8) "file.txt"
    ["parent_file"]=>
    string(4) "dir2"
  }
}


Какой наименее костыльный способ это сделать?
  • Вопрос задан
  • 226 просмотров
Решения вопроса 1
megakor
@megakor
Go/PHP developer | ВКонтакте
function extractPathElements(string $path): array
{
    $explodedPath = explode('/', $path);

    $pathTree = [];
    
    foreach ($explodedPath as $key => $value) {
        if (!$value) {
            continue;
        }
        
        $pathTree[] = [
            'file_name' => $value, 
            'parent_file' => $explodedPath[$key-1] ?? '', 
        ];
    }
    
    return $pathTree;
}

// client code
var_dump(extractPathElements('/dir1/dir2/file.txt'));

/*
array(3) {
  [0]=>
  array(2) {
    ["file_name"]=>
    string(4) "dir1"
    ["parent_file"]=>
    string(0) ""
  }
  [1]=>
  array(2) {
    ["file_name"]=>
    string(4) "dir2"
    ["parent_file"]=>
    string(4) "dir1"
  }
  [2]=>
  array(2) {
    ["file_name"]=>
    string(8) "file.txt"
    ["parent_file"]=>
    string(4) "dir2"
  }
}
*/
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы