PHP高级多维数组排序


PHP Advanced multidimensional array sorting

我递归地读取了一个文件夹,得到了一个这样的多维数组:

Array
(
   [folder1] => Array
       (
           [sub-folder1] => Array
               (
                   [0] => sub-folder-1-file1.xx
                   [1] => sub-folder-1-file2.xx
                   [2] => sub-folder-1-file3.xx
               )
            [0] => folder-1-file1.xx
            [1] => folder-1-file2.xx
            [2] => folder-1-file3.xx
            [3] => folder-1-file4.xx
            [sub-folder2] => Array
                (
                   [0] => sub-folder-2-file1.xx
                   [1] => sub-folder-2-file1.xx
                )
  ...

我想像一样分类

(
   [folder1] => Array
       (
            [0] => folder-1-file1.xx
            [1] => folder-1-file2.xx
            [2] => folder-1-file3.xx
            [3] => folder-1-file4.xx
            [sub-folder1] => Array
               (
                   [0] => sub-folder-1-file1.xx
                   [1] => sub-folder-1-file2.xx
                   [2] => sub-folder-1-file3.xx
               )
            [sub-folder2] => Array
                (
                   [0] => sub-folder-2-file1.xx
                   [1] => sub-folder-2-file1.xx
                )

就像我们按类型而不是简单地按名称列出一样。

我想我必须使用usort,但我无法正确理解:这是我的作品:

usort($array, function($a, $b){
    if ( (is_array($a) && is_array($b)) || (!is_array($a) && !is_array($b)) )
       return 0;
    if ( is_array($a) )
       return -1;
    return 1;
});

任何帮助都将不胜感激。谢谢

我这样解决:

 foreach ($array as $key => $value)
 {
    ksort($array[$key], SORT_STRING);
 }

您可以使用ksort()函数并传递所需的排序类型作为第二个参数。

假设你的数组名称是$test,那么你需要这样的东西:

ksort($test['folder1'], SORT_STRING); //SORT_STRING compares items as strings

如果你做

echo '<pre>',print_r($test,1),'</pre>';

你将能够看到你想要的结果。