按列值对 2dim 数组进行排序

发布于 2024-10-16 14:47:01 字数 637 浏览 8 评论 0原文

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

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'));

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'));

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

彼岸花ソ最美的依靠 2024-10-23 14:47:01

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

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;
}
⒈起吃苦の倖褔 2024-10-23 14:47:01

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

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);
?> 
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文