我在按照我想要的方式排序数组时遇到问题。
这是我的数组的示例输出:
# 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 时间戳。现在我希望整个数组按该时间戳排序,首先是最低值。
我怎样才能做到这一点?
这里有一个 array_multisort 示例:
foreach ($array as $key => $node) {
$timestamps[$key] = $node[2];
}
array_multisort($timestamps, SORT_ASC, $array);
使用接受自定义函数的usort对数组进行排序:
你的函数可能看起来像这样:
function cmp($a, $b)
{
if ($a[2] == $b[2]) {
return 0;
}
return ($a[2] < $b[2]) ? -1 : 1;
}
您只需使用自定义排序即可完成此操作。因此,假设您的日期戳始终为索引 2:
function sortArray($a1, $a2){
if ($a1[2] == $a2[2]) return 0;
return ($a1[2] > $a2[2]) ? -1 : 1;
}
usort($array, "sortArray");
usort是最容易使用的,但您也可以查看array_multisort。
使用 usort 并创建自己的函数,http://php.net/manual/en/function.usort.php
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");
将数据插入到单个临时表中,然后使用 ORDER BY 时间戳进行 SELECT 可能会更容易
这可以通过以下代码实现:
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'];
等等。