tags:

views:

36

answers:

2

All,

I have the following array in array format. The JSON format is shown just for user-friendliness. How can I sort the array ascending with the key "name" in php?

            "food":
            [
                {
                    "id": 1,
                    "name": "dessert"
                },
                {
                    "id": 2,
                    "name": "maincourse"
                },
                {
                    "id": 3,
                    "name": "entrees"
                },
                {
                    "id": 4,
                    "name": "appetizers"
                }
            ]

The desired result is an array like this:

            "food":
            [
                {
                    "id": 4,
                    "name": "appetizers"
                },
                {
                    "id": 1,
                    "name": "dessert"
                },
                {
                    "id": 3,
                    "name": "entrees"
                },
                {
                    "id": 2,
                    "name": "maincourse"
                }
            ]
A: 

You can use the ksort() function (php.net/ksort)

ksort($array);

For example if you have an array:

$array = array("d"=>"lemon", "a"=>"orange", "b"=>"banana", "c"=>"apple");
ksort($array);

It will sort them as a,b,c,d.

Wadih M.
This assumes there's only 1 key. I have 2 keys. How to specify which key to sort on?
Vincent
+4  A: 

Use usort():

$array = array('food' => array(
        array(
            "id"=> 1,
            "name"=> "dessert"
        ),
        array(
            "id"=> 2,
            "name"=> "maincourse"
        ),
        array(
            "id"=> 3,
            "name"=> "entrees"
        ),
        array(
            "id"=> 4,
            "name"=> "appetizers"
        )
    )
);

function compare($a, $b) {
    return strcmp($a['name'], $b['name']);
}

usort($array['food'], 'compare');
print_r($array);
kemp