我有包含在數組中它是象這樣的數據,從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']
數組可以包含任意數量的元素。每個$file['info']['files']
陣列中包含的path
陣列是我遇到問題的地方。
它包含有關文件結構的信息。如果只有1個元素存在,那麼它是一個文件。如果存在多個元素,則從頂部開始的每個元素是下一個元素的父文件夾,最後一個元素是最後一個文件夾中的文件。以上面的例子將是
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'];
}
我怎麼能動態地創建了存在,並添加所需要銘記的是,目錄結構可能是深層次的任意量的信息,每個目錄陣列?
感謝您花時間閱讀我的相當長的問題,我感謝任何人給我的幫助。
你familar與遞歸? – heximal
@heximal沒有我是新的php – Griff
這種問題(當你不知道有多少層次的嵌套)通過遞歸函數解決。 recusrive是自己調用的功能 – heximal