如何在 PHP - Laravel 10 中对多维数组的所有维度进行排序?

问题描述 投票:0回答:2

我有一个像这样的多维数组:

  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"
  ]

如你所见,这个数组代表了一个文件结构。文件夹内的文件表示为具有大小和名称的数组,数组内部表示其文件夹,全部位于根文件夹内。该文件结构包含多个级别的包含文件的子文件夹,因此该数组是一个深度多维数组。

我想对所有数组进行排序,以便文件夹/子文件夹(键=以“/”开头的字符串)始终位于第一个,按字母顺序排序,然后将文件放入相应的文件夹中,按“名称”的值按字母顺序排序。我该怎么做?

php arrays laravel sorting laravel-10
2个回答
0
投票

试试这个。

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);

0
投票

您可以将此数组转换为集合并使用相关的集合方法进行排序。

使用laravel的Arr实用程序,压平数组并排序。

使用递归排序,来自 PHP 标准库。

© www.soinside.com 2019 - 2024. All rights reserved.