questions on sort array by time in php

array_multisort sorts more than one array at once. However, it works on an array of columns, so the foreach loop is needed to get a column of the times. After building up this list, you can then perform the multisort. The $points array is ordered according to the indices in $times, as per this example in the docs.

However, you don't need to perform the sort inside the foreach, as that means the sort happens 4 times (in your example). It only needs to happen once:

foreach ($points as $key => $val) {
    $time[$key] = $val[0];
}

array_multisort($time, SORT_ASC, $points);

The function uasort() takes a comparison callback function. You can use this to compare two timestamps.

$arr = array(
        array('2011-10-02 05:30:00','20'),
        array('2011-10-04 09:30:00','12'),
        array('2011-10-01 13:30:00','25'),
        array('2011-10-03 02:30:00','31')
);

function timecomp($a,$b)
{
    // Subtracting the UNIX timestamps from each other.
    // Returns a negative number if $b is a date before $a,
    // otherwise positive.
    return strtotime($b[0])-strtotime($a[0]);
}
uasort($arr,'timecomp');

print_r($arr);

The above code will return

(
    [1] => Array
        (
            [0] => 2011-10-04 09:30:00
            [1] => 12
        )

    [3] => Array
        (
            [0] => 2011-10-03 02:30:00
            [1] => 31
        )

    [0] => Array
        (
            [0] => 2011-10-02 05:30:00
            [1] => 20
        )

    [2] => Array
        (
            [0] => 2011-10-01 13:30:00
            [1] => 25
        )

)