user3154898
user3154898

Reputation: 311

PHP Advanced multidimensional array sorting

I read recursively a folder and I got a multidimensional array like this:

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

I would like to sort it like

(
   [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
                )

like when we list by Type and not simply by Name.

I guess I must use usort but I can't figure it out properly: here my work:

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

Any help will be appreciated. Thanks.

I SOLVED LIKE THIS:

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

Upvotes: 1

Views: 48

Answers (1)

kidA
kidA

Reputation: 1377

What you can do is use ksort() function and pass the sorting type required as your second parameter.

Say your array's name is $test then you need something like this:

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

if you do a

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

you will be able to see the result you want.

Upvotes: 1

Related Questions