mmt
mmt

Reputation: 161

Sorting Php associative array based on key value

Ok guys, I have an php associative array in the following format .

groupdata: Array
(
    [0] => Array
        (
            [id] => 3324
            [name] => Testme2
            [creationDate] => 31-MAR-14 04.18.29.618000 PM

        )

    [1] => Array
        (
            [id] => 3325
            [name] => paris
            [creationDate] => 31-MAR-14 06.43.28.291000 PM
        )

    [2] => Array
        (
            [id] => 3236
            [name] => GL_HF
            [creationDate] => 29-MAY-14 12.42.01.444000 PM
        )

    [3] => Array
        (
            [id] => 3251
            [name] => attempting
            [creationDate] => 24-FEB-14 03.47.54.732000 PM
        )

    [4] => Array
        (
            [id] => 3272
            [name] => Testme
            [creationDate] => 03-MAR-14 11.24.58.671000 AM
        )
)

Now I want to sort this array based on their names. How can i achieve this ?

I have tried to use ksort/asort methods but it is not wroking.

The desired array is :

groupdata: Array
(
 [0] => Array
        (
            [id] => 3251
            [name] => attempting
            [creationDate] => 24-FEB-14 03.47.54.732000 PM
        )
[1] => Array
        (
            [id] => 3236
            [name] => GL_HF
            [creationDate] => 29-MAY-14 12.42.01.444000 PM
        )
[2] => Array
        (
            [id] => 3325
            [name] => paris
            [creationDate] => 31-MAR-14 06.43.28.291000 PM
        )
[3] => Array
        (
            [id] => 3272
            [name] => Testme
            [creationDate] => 03-MAR-14 11.24.58.671000 AM
        )
[4] => Array
        (
            [id] => 3324
            [name] => Testme2
            [creationDate] => 31-MAR-14 04.18.29.618000 PM

        )
)

Upvotes: 2

Views: 656

Answers (3)

user1978142
user1978142

Reputation: 7948

Alternatively, you could use usort() in conjunction to strtolower(). Consider this example:

$groupdata = array(array('id' => 3324,'name' => 'Testme2','creationDate' => '31-MAR-14 04.18.29.618000 PM'),array('id' => 3325,'name' => 'paris','creationDate' => '31-MAR-14 04.18.29.618000 PM'),array('id' => 3236,'name' => 'GL_HF','creationDate' => '31-MAR-14 04.18.29.618000 PM'),array('id' => 3251,'name' => 'attempting','creationDate' => '31-MAR-14 04.18.29.618000 PM'),array('id' => 3272,'name' => 'Testme','creationDate' => '31-MAR-14 04.18.29.618000 PM'),);

function sorter($a, $b) {
    if ($a['name'] == $b['name']){
        return 0;
    }
    return strtolower($a['name']) < strtolower($b['name']) ? -1 : 1;
}

usort($groupdata, 'sorter');

Sample Output

Upvotes: 0

Hieu Vo
Hieu Vo

Reputation: 3274

Use usort, so you can define your own way to compare elements:

function cmp($a, $b) {
    if ($a['name'] == $b['name']) {
        return 0;
    }
    return ($a['name'] < $b['name']) ? -1 : 1;
}


usort($your_array, "cmp");

Upvotes: 0

user3663507
user3663507

Reputation: 11

$price = array();
foreach ($groupdata as $key => $row)
{
    $price[$key] = $row['name'];
}
array_multisort($price, SORT_DESC, $groupdata);

Read more array_multisort()

Upvotes: 1

Related Questions