Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP高级多维数组排序_Php_Sorting_Multidimensional Array - Fatal编程技术网

PHP高级多维数组排序

PHP高级多维数组排序,php,sorting,multidimensional-array,Php,Sorting,Multidimensional Array,我递归读取一个文件夹,得到一个多维数组,如下所示: Array ( [folder1] => Array ( [sub-folder1] => Array ( [0] => sub-folder-1-file1.xx [1] => sub-folder-1-file2.xx [2] =&g

我递归读取一个文件夹,得到一个多维数组,如下所示:

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
                )
  ...
ksort($test['folder1'], SORT_STRING); //SORT_STRING compares items as strings
我想把它分类

(
   [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
,则需要如下内容:

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
                )
  ...
ksort($test['folder1'], SORT_STRING); //SORT_STRING compares items as strings
如果你做了一个

echo '<pre>',print_r($test,1),'</pre>';
echo'',打印($test,1),'';
您将能够看到所需的结果。

请改用ksort()。