vignesh.D
vignesh.D

Reputation: 776

how to sort array in php based on its name?

I have an array like this

Array
(
    [bms] => Array
        (
            [0] => 123456_bms_for__on__(10-06-2015_18-57).pdf
        )

    [fr] => Array
        (
            [0] => 123456_fr_on_09-21-2015_(09-22-2015_11-46).pdf
        )

    [pcm] => Array
        (
            [0] => 123456_pcm_for_vignesh_on__(10-12-2015_12-30).pdf
        )

    [fds] => Array
        (
            [0] => 123456_fds_ext_for__on__(08-25-2015_10-23).pdf
        )

    [dr] => Array
        (
            [0] => 123456_dr_for__on___(10-23-2015_13-06).pdf
        )

)

And i want to order this array into (bms,dr,fds,pcm,fr) order

Array
(
    [bms] => Array
        (
            [0] => 123456_bms_for__on__(10-06-2015_18-57).pdf
        )
    [dr] => Array
        (
            [0] => 123456_dr_for__on___(10-23-2015_13-06).pdf
        )
    [fds] => Array
        (
            [0] => 123456_fds_ext_for__on__(08-25-2015_10-23).pdf
        )
    [pcm] => Array
        (
            [0] => 123456_pcm_for_vignesh_on__(10-12-2015_12-30).pdf
        )

    [fr] => Array
        (
            [0] => 123456_fr_on_09-21-2015_(09-22-2015_11-46).pdf
        )
)

Please help me to sort out array and help me to achieve the array in new order How to arrange array based on its key value

Upvotes: 2

Views: 58

Answers (2)

Yeldar Kurmangaliyev
Yeldar Kurmangaliyev

Reputation: 34199

You can use uksort PHP function.

uksort() will sort the keys of an array using a user-supplied comparison function. If the array you wish to sort needs to be sorted by some non-trivial criteria, you should use this function.

$sortOrder = array("bms", "dr", "fds", "pcm", "fr");

uksort($yourArray, function($a, $b) use ($sortOrder) {
    return array_search($a, $sortOrder) - array_search($b, $sortOrder); 
});

Working IDEOne or eval.in demos.

Upvotes: 2

Narendrasingh Sisodia
Narendrasingh Sisodia

Reputation: 21437

You can use uksort like as

$pos = ['bms', 'dr', 'fds', 'pcm', 'fr'];
uksort($arr, function ($a, $b) use ($pos) {
    foreach ($pos as $value) {
        if ($value == $a) {
            return 0;
            break;
        }
        if ($value == $b) {
            return 1;
            break;
        }
    }
});

Demo

Upvotes: 2

Related Questions