使用usort()函数帮我对这个PHP数组进行排序

3

我有一个数据结构,看起来像这样

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;
}

注意:在类内调用此函数时,对象的语法应为以下形式:

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

它为什么没有按照你想要的方式排序? - Mike B
你的意思是,不能按照你想要的方式排序? - Aatch
2
Brian,如果你要求别人帮助你,至少花两秒钟想一想,你是否真正告诉了他们你需要什么样的帮助... - Dan Grossman
@丹,抱歉我想按整数降序排序数组。 - Brian
1
你需要说的是:“这段代码确实按时间戳升序排序了数组,但我想要按时间戳降序排序数组。”相反,你把它留在那里,让任何人都无法确定你的排序函数是否有效(你没有分享的代码中可能存在隐藏的错误),为什么你认为它不是你想要的方式,以及你真正想要的是什么。 - Dan Grossman
2个回答

3

这将按升序对您的时间戳进行排序;要按降序排序,请翻转第二个比较(即将$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;
}

1
只需返回 $b[1]-$a[1](或者反之...随便哪一个)。 - Felix Kling
@Felix Kling: 是的,我只是试图匹配他现有的代码,并尝试读懂他的想法。 - BoltClock

2
您可以将时间戳设置为枢轴,然后使用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);
?> 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接