Помогите мне отсортировать этот массив PHP с помощью usort () - PullRequest
3 голосов
/ 06 февраля 2011

У меня есть структура данных, которая выглядит следующим образом:

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

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

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

Я пытаюсь отсортировать массив на основе целого числа, которое является меткой времени Unix.Следующая функция выглядит мне правильно, но сортирует не так, как я хочу.

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

NOTE при вызове этой функции в классе синтаксис OO следующий

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

Ответы [ 2 ]

3 голосов
/ 06 февраля 2011

сортирует ваши метки времени в порядке возрастания;в порядке убывания переверните второе сравнение (т.е. измените $a[1] < $b[1] на $a[1] > $b[1]):

function cmp($a, $b)
{
    if ($a[1] == $b[1]) {
        return 0;
    }
    return ($a[1] > $b[1]) ? -1 : 1;
}
2 голосов
/ 06 февраля 2011

Вы можете установить метку времени в качестве точки разворота.И использовать 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);
?> 
...