tags:

views:

46

answers:

3

Hi, I have this array :

Array
(
[1] => Array
    (
        [id] => 1
        [sort] => 1
    )

[3] => Array
    (
        [id] => 3
        [sort] => 3
    )

[2] => Array
    (
        [id] => 2
        [sort] => 2
    )

)

How do i sort it so its re-ordered using the inner 'sort' key ? ie the above would look like this:

Array
(
[1] => Array
    (
        [id] => 1
        [sort] => 1
    )

[2] => Array
    (
        [id] => 2
        [sort] => 2
    )

[3] => Array
    (
        [id] => 3
        [sort] => 3
    )

)

+1  A: 

Something like this:

uasort($array, 'compfunc');

function compfunc($a, $b)
{
    return $a['sort'] - $b['sort'];
}
Sjoerd
+4  A: 

You can use usort with this comparison function:

function cmpBySort($a, $b) {
    return $a['sort'] - $b['sort'];
}
usort($arr, 'cmpBySort');

Or you use array_multisort with an additional array of key values for the sort order:

$keys = array_map(function($val) { return $val['sort']; }, $arr);
array_multisort($keys, $arr);

Here array_map with the anonymous function is used to build an array of the sort values that is used to sort the array values itself. The advantage of this is that there is np comparison function that needs to be called for each pair of values.

Gumbo
+2  A: 

Something like this:

usort($array, function (array $a, array $b) { return $a["sort"] - $b["sort"]; });
Russell Dias
Damn, beaten to it by a mile...
Russell Dias