[英]How to create hierarchy in array?
我知道我的問題描述得不好,但是我想創建一個“嵌套數組”,如下所示:
文件夾/->文件夾/file.txt,文件夾/文件夾2 /->文件夾/文件夾2 / file.txt,文件夾/文件夾2 /文件夾3 /->等等
但是,我得到了:
E:\wamp\www\index.php:31:
array (size=3)
'folder/' =>
array (size=1)
0 => string 'folder/file.txt' (length=15)
'folder/folder2/' =>
array (size=1)
0 => string 'folder/folder2/file.txt' (length=23)
'folder/folder2/folder3/' =>
array (size=1)
0 => string 'folder/folder2/folder3/file.txt' (length=31)
我的代碼是:
$array = [
'folder/',
'folder/folder2/folder3/',
'folder/folder2/',
'folder/folder2/folder3/file.txt',
'folder/folder2/file.txt',
'folder/file.txt'
];
sort($array);
$array = array_flip($array);
function recursive_dir_nested($a) {
foreach ($a as $k => $v) {
if (preg_match("/\/$/", $k)) {
$a[$k] = [];
}
if (preg_match("/\/[^\/]+$/", $k)) {
$nk = preg_replace("/\/[^\/]+$/", "/", $k);
if (array_key_exists($nk, $a)) {
$a[$nk][] = $k;
unset($a[$k]);
} else {
recursive_dir_nested($a);
}
}
}
return $a;
}
我知道我做錯了,我不確定為什么...我該如何解決?
不確定使用正則表達式是否是最好的方法。 這基於另一個答案-PHP-從定界的字符串中創建多維關聯數組 ,但增加了使用條目數組的想法。 需要注意的一件事是,當添加新條目時,如果該元素當前不是數組,它將變成一個數組,以便它可以包含多個條目( if ( !is_array($current) ) {
部分)。
它使用每個字符串並從中構建文件夾層次結構,將最后一部分另存為文件名,以專門添加到文件夾元素中。
$array = [
'folder/',
'folder/folder2/folder3/',
'folder/folder2/',
'folder/folder2/folder3/file.txt',
'folder/folder2/file.txt',
'folder/file.txt'
];
sort($array);
$output = [];
foreach ( $array as $entry ) {
$split = explode("/", $entry);
$current = &$output;
$file = array_pop($split);
foreach ( $split as $level ) {
if ( !isset($current[$level]) ){
if ( !is_array($current) ) {
$current = [ $current ];
}
$current[$level] = [];
}
$current = &$current[$level];
}
if ( !empty($file) ) {
$current = $file;
}
}
print_r($output);
這給你...
Array
(
[folder] => Array
(
[0] => file.txt
[folder2] => Array
(
[0] => file.txt
[folder3] => file.txt
)
)
)
您可以在PHP中嵌套數組。 您可能還想使用鍵作為目錄名稱:
$array = [
'folder' => [
'folder2' => [
'folder3' => [
'file.txt'
],
'file.txt'
],
'file.txt'
]
];
您可以使用is_array()
檢查每個項目以查看其本身是否為數組,如果不是,則將其視為字符串。
參見此處了解更多信息:php.net/manual/en/language.types.array.php
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.