Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sort 2dim array by column value [duplicate]

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'));
like image 873
Brian Avatar asked Dec 09 '25 15:12

Brian


2 Answers

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;
}
like image 103
BoltClock Avatar answered Dec 11 '25 04:12

BoltClock


You can setup time stamp as pivot. And use array_multisort().

<?php
// Obtain a list of columns
foreach ($data as $key => $row) {
    $time[$key]  = $row[1]; //unix timestamp 
}


array_multisort( $time, SORT_ASC, $data);
?> 
like image 20
Chuck Morris Avatar answered Dec 11 '25 05:12

Chuck Morris



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!