Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP array sort using inner val

Tags:

arrays

php

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
    )

)

like image 510
Fearghal Avatar asked Sep 27 '10 13:09

Fearghal


2 Answers

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.

like image 111
Gumbo Avatar answered Nov 11 '22 07:11

Gumbo


Something like this:

usort($array, function (array $a, array $b) { return $a["sort"] - $b["sort"]; });
like image 4
Russell Dias Avatar answered Nov 11 '22 08:11

Russell Dias