У меня есть данные, содержащиеся в массиве, который, как это так,Динамическое создание многомерного массива из другого массива с помощью PHP?
$file['info']['files'] = array(
[0] => array(
'length' => (int),
'path' => array (
[0] => 'file.txt',
),
),
[1] => array(
'length' => (int),
'path' => array (
[0] => 'directory one',
[1] => 'file2.txt',
),
),
[2] => array(
'length' => (int),
'path' => array (
[0] => 'directory one',
[1] => 'directory two',
[2] => 'file3.txt',
),
),
);
$file['info']['files']
массив может содержать любое количество элементов. В массиве path
, содержащемся в каждом массиве $file['info']['files']
, возникает проблема.
Он содержит информацию о структуре файла. Если существует только один элемент, то это файл. Если существует более одного элемента, каждый элемент, начиная с вершины, является родительской папкой следующего элемента, а последний элемент - это файл в последней папке. На примере выше будет файловая структура
FILE file1.txt
FOLDER directory one
FILE file2.txt
FOLDER directory two
FILE {file3.txt}
Я хотел бы, чтобы извлечь эти данные в собственную матричную структуру, которая должна быть следующей,
$sortedFiles = array(
'file1.txt' => (int),
'directory one' => array(
'file2.txt' => (int),
'directory two' => array(
'file3.txt' => (int),
),
),
);
У меня есть этот код до сих пор,
foreach($file['info']['files'] as $file) {
// LENGTH AND PATH ARE SET
if(isset($file['length'], $file['path'])) {
// GET COUNT OF FILE PATH ARRAY
$count = count($file['path']);
// SINGLE FILE
if($count == 1) {
$sortedFiles[$file['path'][0]] = $file['length'];
// FILES IN DIRECTORY
} else {
// BUILD ARRAY STRUCTURE FOR DIRECTORIES
}
}
}
У меня возникли проблемы с добавлением каталогов в массив. Я мог бы сделать это вручную, и только каждый раз отправляйте столько каталогов каждый раз, проверяя, существует ли массив для каталога, и если он его не создает, и если он существует, то добавьте его. Я пробовал это с помощью кода ниже, но он имеет только один каталог в глубину (код пошел там, где он говорит // BUILD ARRAY STRUCTURE
выше).
// FOLDER NOT SET
if(!isset($files[$file['path'][0]])) {
$sortedFiles[$file['path'][0]] = array($file['path'][1] => $file['length'],);
// FOLDER SET
} else {
$sortedFiles[$file['path'][0]][$file['path'][1]] = $file['length'];
}
Как динамически создавать массивы для каждого каталога, который существует и добавить информацию, которая необходима с учетом того, что структура каталогов может быть любое количество уровней в глубину?
Спасибо, что нашли время, чтобы прочитать мой довольно длинный вопрос, и я ценю любую помощь, которую кто-либо мне дает.
являются вы познакомились с рекурсией? – heximal
@heximal Нет Я новичок в php – Griff
таких проблем (когда вы не знаете, сколько уровней гнездования) решаются с помощью рекурсивных функций. recusrive - это функция, которая называет себя – heximal