按时间戳整数列对二维数组进行排序[重复]

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

我在按照我想要的方式排序数组时遇到问题。

这是我的数组的示例输出:

# 159 rows in total
Array
(
    [0] => Array
        (
            [0] => pastebin
            [1] =>  
            [2] => 1305025723
            [3] => /fcTGqQGD
        )
 
    [1] => Array
        (
            [0] => pastebin
            [1] =>  
            [2] => 1305025723
            [3] => /YQNk8yqa
        )
 
    [2] => Array
        (
            [0] => pastebin
            [1] =>  
            [2] => 1305025723
            [3] => /u2BNPrad
        )
 
    [3] => Array
        (
            [0] => pastebin
            [1] =>  
            [2] => 1305025722
            [3] => /d/blogdialain.com
        )
 
    [4] => Array
        (
            [0] => pastebin
            [1] =>  
            [2] => 1305025722
            [3] => /d/shopcraze.com
        )
 
    [5] => Array
        (
            [0] => pastebin
            [1] =>  
            [2] => 1305025722
            [3] => /domains_archive/175
        )
 
    [6] => Array
        (
            [0] => pastebin
            [1] =>  
            [2] => 1305025722
            [3] => /d/togou.com
        )
 
    [7] => Array
        (
            [0] => pastebin
            [1] =>  
            [2] => 1305025722
            [3] => /W6NafmJa
        )
)

此处完整数组数据:http://pastebin.com/GJNBmqL7

数据同时来自各个数据库,因此我将数据放入数组的方式受到限制。

[2] 始终包含 Linux 时间戳。现在我希望整个数组按该时间戳排序,首先是最低值。

我怎样才能做到这一点?

php arrays sorting multidimensional-array timestamp
8个回答
12
投票

这里有一个 array_multisort 示例:

foreach ($array as $key => $node) {
   $timestamps[$key]    = $node[2];
}
array_multisort($timestamps, SORT_ASC, $array);

12
投票

使用接受自定义函数的usort对数组进行排序:

我们排序

你的函数可能看起来像这样:

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

8
投票

您只需使用自定义排序即可完成此操作。因此,假设您的日期戳始终为索引 2:

function sortArray($a1, $a2){
    if ($a1[2] == $a2[2]) return 0;
    return ($a1[2] > $a2[2]) ? -1 : 1;
}

usort($array, "sortArray");

5
投票

usort是最容易使用的,但您也可以查看array_multisort


0
投票

使用 usort 并创建自己的函数,http://php.net/manual/en/function.usort.php


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

$data = array( /* your data */ );

usort($data, "cmp");

0
投票

将数据插入到单个临时表中,然后使用 ORDER BY 时间戳进行 SELECT 可能会更容易


0
投票

这可以通过以下代码实现:

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

这将产生 $variable 的排序数组,假设时间戳位于

$variable[0]['timestamp'];
$variable[0]['timestamp'];

等等。

© www.soinside.com 2019 - 2024. All rights reserved.