Search code examples
phparrayssortingmultidimensional-arrayusort

Sort 2dim array by column value


I have a data structure that looks like

Array
(
[0] => Array
    (
        [0] => something
        [1] => 1296986500
    )

[1] => Array
    (
        [0] => something else
        [1] => 1296600100
    )

[2] => Array
    (
        [0] => another thing
        [1] => 1296831265
    )
)

I'm trying to sort the array based off of the integer which is a unix timestamp. The following function looks right to me but is not sorting the way I want.

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

NOTE when calling this function within a class the OO syntax is the following

uasort($_data, array($this, 'cmp'));

Solution

  • That sorts your timestamps in ascending order; for descending order, flip the second comparison (i.e. change $a[1] < $b[1] to $a[1] > $b[1]):

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