我有一个像这样的多维数组:
0 => array:2 [▼
"name" => "Game.exe"
"size" => "9.8 MiB"
]
1 => array:2 [▼
"name" => "Launcher.exe"
"size" => "3.9 MiB"
]
"/USRDIR" => array:4 [▼
0 => array:2 [▶]
1 => array:2 [▶]
"/movie" => array:2 [▶]
2 => array:2 [▶]
]
2 => array:2 [▼
"name" => "bink2w32.dll"
"size" => "286.5 KiB"
]
如你所见,这个数组代表了一个文件结构。文件夹内的文件表示为具有大小和名称的数组,数组内部表示其文件夹,全部位于根文件夹内。该文件结构包含多个级别的包含文件的子文件夹,因此该数组是一个深度多维数组。
我想对所有数组进行排序,以便文件夹/子文件夹(键=以“/”开头的字符串)始终位于第一个,按字母顺序排序,然后将文件放入相应的文件夹中,按“名称”的值按字母顺序排序。我该怎么做?
试试这个。
function sortFileStructure(&$array) {
$folders = [];
$files = [];
foreach ($array as $key => &$element) {
if (is_array($element)) {
if (isset($element['name'])) {
$files[$key] = $element;
} else {
sortFileStructure($element);
$folders[$key] = $element;
}
}
}
ksort($folders);
$array = $folders + $files;
}
在需要的地方调用此函数。
sortFileStructure($yourArray);
您可以将此数组转换为集合并使用相关的集合方法进行排序。
使用laravel的Arr实用程序,压平数组并排序。
使用递归排序,来自 PHP 标准库。