按列值对 2dim 数组进行排序[重复]

问题描述 投票:0回答:2

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

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

注意 在类中调用此函数时,OO 语法如下

uasort($_data, array($this, 'cmp'));
php arrays sorting multidimensional-array usort
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;
}

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);
?> 
© www.soinside.com 2019 - 2024. All rights reserved.