对多维数组进行排序

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

我需要对代表文件系统结构的多维数组进行排序:

Array
(
    [dir1] => Array
        (
            [dir2] => Array
                (
                    [dir3] => Array
                        (
                            [dir4] => Array
                                (
                                    [0] => file1.php
                                    [1] => abc.php
                                )

                        )

                    [0] => file2.php
                    [1] => abc.php
                )

        )

    [abc] => Array
        (
            [abc] => Array
                (
                    [abc] => Array
                        (
                            [0] => file5.php
                        )

                )

        )

)

我不知道算法是什么。

php arrays sorting multidimensional-array
2个回答
3
投票

http://php.net/sort#51088

将 mulsort 函数开头的 sort($a) 替换为 ksort($a)

编辑:抱歉,只需将 mulsort 代码更改为:

function mulsort(&$a)
{
 ksort($a);
 foreach($a as &$value)
    if (is_array($value))
        mulsort($value);
}

0
投票

要对可变深度结构进行排序,请使用递归遍历所有级别。如果当前正在处理的目录是索引数组,则对值进行自然排序,否则对键进行自然排序。这将以逻辑且人性化的方式呈现您的目录和文件。

代码:(演示

function sortFileSystem(array &$array)
{
    foreach ($array as &$item) {
        if (is_array($item)) {
            (__FUNCTION__)($item);
        }
    }
    if (array_is_list($array)) {
        sort($array, SORT_NATURAL);
    } else {
        ksort($array, SORT_NATURAL);
    }
}

sortFileSystem($array);
var_export($array);
© www.soinside.com 2019 - 2024. All rights reserved.